Разобрать вложенные объекты json в groovy - PullRequest
0 голосов
/ 28 июня 2019

У меня есть файл json, содержащий контактную информацию, сгруппированную по городам. Я хочу разобрать 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"
    }
  ]
}'''

Я перепробовал несколько вариантов на следующую тему, но пока что все они провалились.

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

1 Ответ

1 голос
/ 28 июня 2019

С 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...