Попытка обновить массив json, используя net minidev json, но получаю ошибку приведения - PullRequest
1 голос
/ 02 марта 2020

Я пытаюсь удалить или обновить несколько полей из jsonArray, который состоит из LinkedHashMap . Я посмотрел, как обновить LinkedHashMap, и put (ключ, значение) является стандартным процессом, но при попытке получить java .lang.Integer невозможно привести к java .util.LinkedHashMap ошибка.

Мой код выглядит следующим образом:

public static JSONArray updateJsonFields(JSONArray json, LinkedHashMap fieldMap) {
    JSONArray updatedJson = new JSONArray();
    int sizeJson = json.size();
    for(int i = 0 ; i < sizeJson ; i++) {
        ((LinkedHashMap) json.get(i)).forEach((key, value) -> {
            if(key.equals("responseHeaders")) {
                ((LinkedHashMap) value).forEach((fieldKey, fieldValue ) -> {
                    if(fieldKey.equals("Date")){
                        ((LinkedHashMap) fieldValue).put("Date", fieldMap.get("Date"));
                    } else if( fieldKey.equals("TransID") ) {
                        ((LinkedHashMap) fieldValue).put("TransID", fieldMap.get("TransID"));
                    }
                });
            } else if (key.equals("requestTimeStamp")) {
                ((LinkedHashMap) value).put("requestTimeStamp", fieldMap.get("requestTimeStamp"));
            } else if (key.equals("responseTime")) {
                ((LinkedHashMap) value).remove("responseTime");
            }
        });
    }
    return updatedJson;
}

Что также сбивает с толку, так это то, что метод remove возвращает ту же ошибку. Я не работал с LinkedHashMaps в Java до сих пор, поэтому я не уверен, что мне нужно делать. Я искал около двух дней и не могу найти ответ, который мне нужен.

Любая помощь будет признательна.

Спасибо.

1 Ответ

0 голосов
/ 02 марта 2020

Существует некоторая известная странность с преобразованием JSON при выполнении в Java, пожалуйста, прочитайте это: https://github.com/intuit/karate/issues/787

Поэтому я настоятельно рекомендую выполнить ваши манипуляции JSON в каратэ непосредственно в этом случае.

Обновление и удаление очень легко. Вот примеры:

* def temp = { foo: 'bar' }
* temp.foo = 'hello'
* match temp == { foo: 'hello' }
* temp.bar = 'world'
* match temp == { foo: 'hello', bar: 'world' }

# * remove temp.foo
* karate.remove('temp', '$.foo')
* match temp == { bar: 'world' }
...