Ошибка JSONObject при выполнении кода для обновления удаленного файла JSON - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь обновить файл JSON с помощью запроса HTTP GET.У меня пока есть следующее ниже, но оно возвращает org.json.simple.JSONObject cannot be cast to org.json.JSONObject.Я пробовал многочисленные методы с этим, но я преодолеваю одно и то же препятствие и хожу по кругу.Пожалуйста, помогите мне.

Цель после просмотра исправленных данных JSON, выведенных в систему, - записать их обратно в файл.

ФОРМАТ ОТВЕТА НА ПОЛУЧЕНИЕ HTTP:

{
array: [
"data1" : "data 1",
"data2" : "data 2",
"data3" : "data 3",
"data4" : "data 4",
"data5" : "data 5",
]
}

СУЩЕСТВУЮЩИЙ ФАЙЛ JSON (обратите внимание, нет массива):

{
"data5" : "data 5",
"dataA" : "data A",
"dataB" : "data B",
"dataC" : "data C",
"dataD" : "data D",
}

КОД ПОЛУЧЕНИЯ HTTP:

@Component
public class ServiceConnector {

    private final HttpClient client;

    public ServiceConnector() {
        client = HttpClientBuilder.create().build();
    }

    public String get(String url, String acceptHeader, Optional<String> bearerToken) throws UnauthorizedException {
        HttpGet request = new HttpGet(url);
        request.addHeader("Accept", acceptHeader);
        if (bearerToken.isPresent()) {
            request.addHeader("Authorization", "Bearer " + bearerToken.get());
        }

        try {
            HttpResponse response = client.execute(request);

//new code
String data = EntityUtils.toString(response.getEntity());
JSONObject root = new JSONObject(data);
JSONArray results = root.getJSONArray("results");
for(int i = 0; i < results.length(); i++) {

JSONObject jsonResult = results.getJSONObject(i);

OBLI Result = new OBLI();
String data1 = jsonResult.getString("data1");
String data2 = jsonResult.getString("data2");
String data3 = jsonResult.getString("data3");
String data4 = jsonResult.getString("data4");
String data5 = jsonResult.getString("data5");

try {
FileReader reader = new FileReader("/root/Desktop/data.json");

JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(reader);
System.out.println(jsonObject);

JSONObject dataObj = (JSONObject) jsonObject.get("data5");
System.out.println(periodObj);

dataObj.put("data5",data5);

System.out.println(jsonObject);

}

catch (IOException e) {
          throw new RuntimeException(e);
       } catch (ParseException e) {
e.printStackTrace();
}
}
//end of new code

            if (response.getStatusLine().getStatusCode() == 401) {
                throw new UnauthorizedException();
            }
            return "something else later";
}
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Ответ на этот вопрос состоял в том, что org.json и org.json.simple не создали JSONObjects, которые были бы взаимозаменяемыми.

Я использовал библиотеку Джексона и ObjectMapper, JsonNode и ObjectNodeобновить файл - в конечном итоге полностью удалить библиотеку org.json.simple.

0 голосов
/ 30 июня 2019

Я думаю, что проблема с " HTTP GET RESPONSE FORMAT ". может быть, правильный формат JsonArray: { "массив": [{ «data1»: «data 1», «data2»: «data 2», «data3»: «data 3», «data4»: «data 4», «data5»: «данные 5» }] и тогда вы можете изменить Результаты JSONArray = root.getJSONArray ("результаты"); до Результаты JSONArray = root.getJSONArray ("массив"); и затем используйте цикл for-each для получения одного за другим объекта с помощью DTO. } Таким образом, вы можете конвертировать jsonArray в JsonObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...