Использование JSON Путь для обновления значения в json с помощью объекта json - PullRequest
1 голос
/ 16 июня 2020

У меня два файла json. Один - это файл, который нужно обновить, а другой - файл, из которого я читаю значение. Моя проблема в том, что значение, которое нужно переопределить, должно быть переопределено другим объектом. Когда я использую библиотеку путей JSON, я получаю пустую карту в пространстве значений.

Пример:

val sourceConfigStr =
  """
    |{
    |   "path": {
    |                    "dummyKey1" : "nothing",
    |                    "dummyKey2" : "data.csv"
    |                 },
    |   "format": "RANDOM",
    |   "schema": "schema.json"
    |}
  """.stripMargin;

val modifiedString = JsonPath.parse(sourceConfigStr).set("$.path.dummyKey1", Map("dummyKey13" ->  "Hello")).jsonString()
val modifiedSource = JsonUtil.fromJson[Map[String,Any]](modifiedString);
println(modifiedSource)

Output : Map(path -> Map(dummyKey1 -> Map(), dummyKey2 -> data.csv), format -> RANDOM, schema -> schema.json)

Как видите, dummyKey1 был заменен пустой картой ( ). Как это исправить?

Обновление: эта проблема существует, потому что для функции .set () требуется значение String. Итак, я создал строку json и попытался передать ее. Однако теперь в моем выводе есть backsla sh и "". Как сделать из него униформу JSON?

1 Ответ

0 голосов
/ 16 июня 2020

В качестве опции вы можете использовать Dijon для безопасного и удобного чтения, обновления и сериализации без схемы JSON значений:

val sourceConfigStr =
  """
    |{
    |   "path": {
    |                    "dummyKey1" : "nothing",
    |                    "dummyKey2" : "data.csv"
    |                 },
    |   "format": "RANDOM",
    |   "schema": "schema.json"
    |}
  """.stripMargin

val json = parse(sourceConfigStr)
json.path.dummyKey1 = json"""{"dummyKey13":"Hello"}"""
println(json)

Ожидаемый результат:

{"path":{"dummyKey1":{"dummyKey13":"Hello"},"dummyKey2":"data.csv"},"format":"RANDOM","schema":"schema.json"}
...