• 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))
    

    使用起来很方便

  • 相关阅读:
    Java枚举和反射
    Java网络编程
    django 中文乱码问题
    chrome 开发人员工具
    js 编码问题
    js 复制内容到剪切板
    网页获取页面上选择的内容
    git命令
    Jquery和Javascript对象之间的转换
    Spring Data Elasticsearch
  • 原文地址:https://www.cnblogs.com/goldenSky/p/13398319.html
Copyright © 2020-2023  润新知