Groovy: выход из нижнего уровня JSON - PullRequest
1 голос
/ 30 октября 2019

Мне нужно сохранить ключи JSON первого уровня и преобразовать значения в экранированные строки, но только в том случае, если значения также являются объектами JSON. Как это можно сделать в Groovy?

Пример ввода:

{
  "a": "1",
  "b": {
    "c": "2",
    "d": {
      "e": "3"
    }
  },
  "f": "4"
}

Желаемый результат:

{
  "a": "1",
  "b": "{ \"c\": \"2\", \"d\": { \"e\": \"3\"} }",
  "f": "4"
}

1 Ответ

0 голосов
/ 30 октября 2019

Если вы используете JsonSlurper для анализа входного JSON, то любой вложенный объект JSON будет представлен как LazyMap. Вы можете использовать эту информацию, чтобы собрать все записи из проанализированного объекта JSON (который также является картой) и преобразовать любой объект карты в его строковое представление JSON. Вы можете преобразовать любое значение в строковое представление JSON, используя метод groovy.json.JsonOutput.toJson(object).

import groovy.json.JsonOutput
import groovy.json.JsonSlurper

def input = '''{
  "a": "1",
  "b": {
    "c": "2",
    "d": {
      "e": "3"
    }
  },
  "f": "4"
}'''

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

def escaped = json.collectEntries { k,v ->
    [(k): v instanceof Map ? new JsonOutput().toJson(v) : v]
}

def output = new JsonOutput().prettyPrint(JsonOutput.toJson(escaped))

println output

Вывод:

{
    "a": "1",
    "b": "{\"c\":\"2\",\"d\":{\"e\":\"3\"}}",
    "f": "4"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...