Добавление и удаление частей JSON в Groovy

#json #groovy

Вопрос:

Я только вчера начал изучать Groovy, так что у меня все еще мало знаний об этом. Я хочу сначала удалить часть JSON, а затем добавить что-то в начало оставшегося JSON.

Вот как выглядит текущий JSON:

 {
  "Association_1": {
    "Price": 71.4,
    "Branch": "600001",
    "Item": "BB101",
    "UOM": "CS"
  },
  "Association_2": {
    "Price": 3.88,
    "Branch": "600001",
    "Item": "BB101",
    "UOM": "LB"
  },
  "Association_3": {
    "Price": 17.85,
    "Branch": "600001",
    "Item": "BB101",
    "UOM": "PC"
  }
}
 

Это желаемый JSON:

 {
  "Pricing": [
    {
      "Price": 71.4,
      "Branch": "600001",
      "Item": "BB101",
      "UOM": "CS"
    },
    {
      "Price": 3.88,
      "Branch": "600001",
      "Item": "BB101",
      "UOM": "LB"
    },
    {
      "Price": 17.85,
      "Branch": "600001",
      "Item": "BB101",
      "UOM": "PC"
    }
  ]
}
 

Комментарии:

1. Что вы пробовали до сих пор? Где ты застрял?

2. Я даже не знаю, с чего начать. До вчерашнего дня я даже не знал о существовании Groovy. Мне просто трудно об этом думать. Я читал о некоторых примерах, но я застрял на том, с чего начать.

Ответ №1:

Предполагая, что ваш json находится в такой строке:

 def json = '''{
  "Association_1": {
    "Price": 71.4,
    "Branch": "600001",
    "Item": "BB101",
    "UOM": "CS"
  },
  "Association_2": {
    "Price": 3.88,
    "Branch": "600001",
    "Item": "BB101",
    "UOM": "LB"
  },
  "Association_3": {
    "Price": 17.85,
    "Branch": "600001",
    "Item": "BB101",
    "UOM": "PC"
  }
}'''
 

Затем вы можете импортировать классы передачи Json и проанализировать json на карте

 import groovy.json.*

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

Нам нужны значения этой карты, нас не волнуют ключи, поэтому давайте соберем их в список

 def values = parsed*.value
 

И наша новая форма объекта имеет ключевое «Ценообразование», а затем эти значения мы просто схватили

 def reshaped = [Pricing: values]
 

Вот и все! Теперь нам просто нужно преобразовать его обратно в красивую строку Json:

 def newJson = JsonOutput.prettyPrint(JsonOutput.toJson(shaped))
 

И если мы распечатаем это:

 println newJson
 

Мы получаем

 {
    "Pricing": [
        {
            "Price": 71.4,
            "Branch": "600001",
            "Item": "BB101",
            "UOM": "CS"
        },
        {
            "Price": 3.88,
            "Branch": "600001",
            "Item": "BB101",
            "UOM": "LB"
        },
        {
            "Price": 17.85,
            "Branch": "600001",
            "Item": "BB101",
            "UOM": "PC"
        }
    ]
}