【问题标题】:How to get nested json object/value in scala如何在scala中获取嵌套的json对象/值
【发布时间】:2017-10-27 11:29:24
【问题描述】:

我有 Elasticsearch 搜索响应,它是一个深度嵌套的 Json 文件,我不知道如何从中获取特定值。请是 Scala 和一般编程的新手,我在网上搜索过,找不到任何解释得很好的答案。 这是 Json 文件,我想得到的值是 "getSum":"value"

Search_response: org.elasticsearch.action.search.SearchResponse = {
  "took" : 32,
  "timed_out" : false,
  "_shards" : {
    "total" : 3,
    "successful" : 3,
    "failed" : 0
  },
  "hits" : {
    "total" : 12,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "myIndex",
      "_type" : "myType",
      "_id" : "4151202002020",
      "_score" : 1.0,
      "_source":{"pint":[{"printer":[{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"}],"Lam":[{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"}],"Kam":[{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"}],"Jas":[{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"}],"tiv":[{ourc""s:"wrer","sourceType":"rsd","Vag":"agaatttt363336"}],"timeLineSource:[{"LA":"DGAT","GATA":"JAS","timeline":9.111694,"GA":"SFWF2525252552552525"}
    }, {
       "_index" : "myIndex",
      "_type" : "myType",
      "_id" : "4151202002020",
      "_score" : 1.0,
       "_source":{"pint":[{"printer":[{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"}],"Lam":[{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"}],"Kam":[{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"}],"Jas":[{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"}],"tiv":[{ourc""s:"wrer","sourceType":"rsd","Vag":"agaatttt363336"}],"timeLineSource:[{"LA":"DGAT","GATA":"JAS","timeline":9.111694,"GA":"SFWF2525252552552525"}
    }, {
        "_index" : "myIndex",
      "_type" : "myType",
      "_id" : "4151202002020",
      "_score" : 1.0,
       "_source":{"pint":[{"printer":[{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"}],"Lam":[{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"}],"Kam":[{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"},{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"}],"Jas":[{"sourceName":"3636636","sourceType":"Bin","Star":0.0,"Fun":"gatayay"}],"tiv":[{ourc""s:"wrer","sourceType":"rsd","Vag":"agaatttt363336"}],"timeLineSource:[{"LA":"DGAT","GATA":"JAS","timeline":9.111694,"GA":"SFWF2525252552552525"}
    }, {
  },
  "aggregations" : {
    "DAEY" : {
      "doc_count" : 59,
      "histogram" : {
        "buckets" : [ {
          "key_as_string" : "1978-02-22T00:00:00.000Z",
          "key" : 1503360000000,
          "doc_count" : 59,
          "nestedValue" : {
            "doc_count" : 177,
            "getSum" : {
              "value" : 768.0690221786499
            }
          },
        }
    }
  }
}

这是我尝试过的
val getResult: String = searchResult.toString.stripMargin val getValue = JsonParser.parse(getResult).asInstanceOf[JObject].values("aggregations").toString

【问题讨论】:

    标签: json scala


    【解决方案1】:

    您可以通过使用类型安全配置来解决此问题。请在下面找到所需的 maven 和 sbt 依赖项 -

    Maven 依赖 -

    <dependency>
        <groupId>com.typesafe</groupId>
        <artifactId>config</artifactId>
        <version>1.3.1</version>
    </dependency>
    

    Sbt 依赖 -

    libraryDependencies += "com.typesafe" % "config" % "1.3.1"
    

    然后,您可以使用以下代码获取 sum 的值 -

    import com.typesafe.config.ConfigFactory
    val config = ConfigFactory.parseString(getResult)
    config.getConfigList("aggregations.DAEY.buckets").get(0).getString("nestedValue .getSum.value")
    

    从此link中签出库的 API 文档

    【讨论】:

    • 谢谢,但我已经添加了依赖项,但似乎无法访问“config”
    • 抱歉,我忘了初始化配置。请查看修改后的答案。
    • @PeterJones 发现这很有帮助。谢谢:)
    【解决方案2】:

    终于用上了

    val getResult: String = searchResult.toString.stripMargin   
    val getValue = JsonParser.parse(getResult).asInstanceOf[JObject].values("aggregations").toString
    val valueToDouble = getValue.split(" ").last.dropRight(13).toDouble
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      相关资源
      最近更新 更多