Я надеюсь, что это помогает.

ужно найти ключquote.orderAttributes[0].attributeDetail.name и установите его значениеnull или любое другое значение, которое я хочу. Мне нужно сделать это только для первого элемента в любом списке, поэтому выбор [0] подойдет. Я хочу иметь возможность использовать путь, такой как "quote.orderAttributes.attributeDetail.name". Но учитывая количество времени, которое я потратил до сих пор, пожалуйста, посоветуйте какие-нибудь подходы лучше

Вот этот Json:

{
  "source": "source",
  "orderId": null,
  "Version": null,
  "quote": {
    "globalTransactionId": "k2o4-6969-1fie-poef",
    "quoteStatus": "Not Uploaded",
    "events": {
      "eventDescription": "event description",
      "eventTypeName": "Event Type"
    },
    "someReport": {
      "acceptResultsFlag": "Y",
      "orderDate": "2017-06-14",
      "orderStatus": "string"
    },
    "anotherReport": {
      "id": 627311,
      "orderDate": "2017-06-14"
    },
    "attributes": [
      {
        "appliedFlag": "Y",
        "attributeDetail": {
          "name": "name1",
          "value": "value1"
        },
        "attributeName": "attribute1"
      },
      {
        "appliedFlag": "N",
        "attributeDetail": {
          "name": "name2",
          "value": "value2"
        },
        "attributeName": "attribute2"
      }
    ],
    "orderAttributes": [
      {
        "appliedFlag": "Y",
        "attributeDetail": {
          "name": "name3",
          "value": "value3"
        },
        "attributeName": "orderAttribute1"
      },
      {
        "appliedFlag": "N",
        "attributeDetail": {
          "name": "name4",
          "value": "value4"
        },
        "attributeName": "orderAttribute2"
      }
    ]
  }
}

Я знаю следующие работы, но требует, чтобы я знал, какой объект (ы) являетсяArrayList и укажите его[0] индексированный элемент:

def input = new File("src/test/resources/ShortExample.json")
def json = new JsonSlurper().parse(input)
def option1 = json['quote']["attributes"][0]["attributeDetail"]["name"]
println option1

//or this 
//where csvData.fullPath = quote.orderAttributes.attributeDetail.name

def (tkn1, tkn2, tkn3, tkn4) = csvData.fullPath.tokenize('.')
def option2 = json["$tkn1"]["$tkn2"][0]["$tkn3"]["$tkn4"]
println option2

Я хотел бы иметь возможность:

def input = new File("src/test/resources/ShortExample.json")
def json = new JsonSlurper().parse(input)
def changeValueTo = null
def (tkn1, tkn2, tkn3, tkn4) = csvData.fullPath.tokenize('.')
json["$tkn1"]["$tkn2"]["$tkn3"]["$tkn4"] = changeValueTo

Я попытался реализовать многие из приведенных здесь примеров, используя рекурсию, методы создания MapsOrCollections, которые идентифицируют объект и затем ищут его по ключу или значению, даже примеры батута.

Если бы вы могли указать мне на хорошую статью, объясняющую сериализацию и десериализацию, это было бы очень ценно.

Заранее спасибо.

Ответы на вопрос(2)

Ваш ответ на вопрос