scala中json操作

解析json

个人认为,解析json用的最多的就是fastjson了
使用前需要在pom文件中引用:

      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.47</version>
      <scope>compile</scope>

代码案例:

        val jsonStr =
          """
            |[
            |        {
            |            "type_name" : "aa",
            |            "score" : 0.9995,
            |            "classcode" : "a1:0.2136;a2:0.2136;a3:0.2136;a4:0.1582;a5:0.1578;a6:0.0429;a7:0.0004"
            |        },
            |        {
            |            "type_name" : "bb",
            |            "score" : 0.0005,
            |            "classcode" : "b1:0.5000;b2:0.5000"
            |        }
            |    ]
            |""".stripMargin
        val typeTageArr = mutable.ArrayBuffer[Map[String,String]]()
        if (!"".equals(jsonStr) && !"[]".equals(jsonStr)) {
          val jsonArr = JSON.parseArray(jsonStr)
          val houses = (0 until jsonArr.size()).map(jsonArr.getJSONObject).toArray
          for(jsMap <- houses){
            val typeName = jsMap.get("type_name").toString
            val classCode = jsMap.get("classcode").toString.split(";").map(x => x.split(":")(0)).mkString(",")
            typeTageArr += Map("type" -> typeName,"classTags" -> classCode)
          }
        }

array转json

一开始使用JSON.toJSONString(typeTageArr)这种方式,但是报如下错

error: ambiguous reference to overloaded definition,
both method toJSONString in object JSON of type (x$1: Any, x$2: com.alibaba.fastjson.serializer.SerializerFeature*)String
and  method toJSONString in object JSON of type (x$1: Any)String

从报错的信息当中我们得知是scala对对重载定义的模糊引用造成,从fastjson的源码中可以看到,有两个toJSONString的方法:

public static String toJSONString(Object object) {
        return toJSONString(object, emptyFilters);
    }

public static String toJSONString(Object object, SerializerFeature... features) {
    return toJSONString(object, DEFAULT_GENERATE_FEATURE, features);
}

在第二个方法中SerializerFeature... features 是一个可变长参数,带有变长参数的方法重载使得scala在调用方法时感到“模糊”,就无法匹配参数的类型

所以在array或者map转json对象的时候,使用json4s比较好
使用案例:

import org.json4s.JsonDSL._
import org.json4s.jackson.JsonMethods._
compact(render(typeTageArr))

使用起来很方便

原文地址:https://www.cnblogs.com/goldenSky/p/13398319.html