zoukankan      html  css  js  c++  java
  • 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))
    

    使用起来很方便

  • 相关阅读:
    【转载】ESFramewor使用技巧(2)-- 在插件中使用NHibernate
    【转载】ESFramework介绍之(20)―― 插件自动升级
    [转载]我的架构经验小结(一)-- 常用的架构模型
    [转载]TCP服务器“拒绝服务攻击” 解决方案
    【转载】我的架构经验小结(三)-- 深入三层架构
    【转载】动态加载dll
    CSS3动画之一:Transitions功能
    CSS3中的transform变形
    [转载]插件开发
    【转载】服务器系统自动升级
  • 原文地址:https://www.cnblogs.com/goldenSky/p/13398319.html
Copyright © 2011-2022 走看看