簡體   English   中英

在Groovy中解析嵌套的json對象

[英]Parse nested json objects in groovy

我有一個json文件,其中包含按城市分組的聯系信息。 我想解析json並創建一個名稱和數字列表,但是擺弄一個小時左右后,我無法在groovy中使用它。

def ​json = '''{
  "date":"2018-01-04T22:01:02.2125",
  "boston": [
    {
      "name":"bob",
      "phone":"242 123123",
      "ext":"12",
      "email":"bob@boston.com"
    },
    {
      "name":"alice",
      "phone":"212-123-345",
      "ext":"1",
      "email":"alice@boston.com"
    }
  ],
  "chicago": [
    {
      "name":"charlie",
      "phone":"313-232-545",
      "ext":"14",
      "email":"charlie@chicago.com"
    },
    {
      "name":"denise",
      "phone":"414-123-546",
      "ext":"9",
      "email":"denise@chicago.com"
    }
  ]
}'''

我已經嘗試了以下主題的一些變體,但到目前為止它們都失敗了。

parsedjson = slurper.parseText(json)
phonelist = []
parsedjson.each{phonelist.add([it['name'],it['phone']])}

使用您擁有的json非常棘手,因為您需要查找列表中的值...您可以使用findAll來做到這一點,因此給定json:


def ​json = '''{
  "date":"2018-01-04T22:01:02.2125",
  "boston": [
    {
      "name":"bob",
      "phone":"242 123123",
      "ext":"12",
      "email":"bob@boston.com"
    },
    {
      "name":"alice",
      "phone":"212-123-345",
      "ext":"1",
      "email":"alice@boston.com"
    }
  ],
  "chicago": [
    {
      "name":"charlie",
      "phone":"313-232-545",
      "ext":"14",
      "email":"charlie@chicago.com"
    },
    {
      "name":"denise",
      "phone":"414-123-546",
      "ext":"9",
      "email":"denise@chicago.com"
    }
  ]
}'''

您可以像目前一樣導入JsonSlurper並解析json:

import groovy.json.JsonSlurper

def parsedjson = new JsonSlurper().parseText(json)

然后;

def result = ​parsedjson.findAll { it.value instanceof List } // Find all entries with a list value
          .values()                                          // Get all the lists
          .flatten()                                         // Merge them into a single list
          .collect { [it.name, it.phone] }     ​​​​​              // grab the name and phone for each

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM