Не получается распарсить JSON

265
08 сентября 2017, 20:36

Есть вот такой JSON:

{
"sourceId": "currency-cash",
"date": "2017-09-07T15:56:32+03:00",
"organizations": [{
 {
"orgType": 1,
"address": "ул. Автозаводская, 54\/19",
"regionId": "0,7oiylpmiow8iy1smadi",
"phone": "123",
"link": "http:\/\/organizations\/ru\/info\/currency\/-\/7oiylpmiow8iy1smb0b\/cash",
"id": "7oiylpmiow8iy1smb0b",
"cityId": "7oiylpmiow8iy1smadi",
"oldId": 1266,
"title": "Bank",
"branch": false,
"currencies": {
    "EUR": {
        "ask": "31.6500",
        "bid": "30.9000"
    },
    "USD": {
        "ask": "26.4500",
        "bid": "26.0500"
    }
}
}

А точнее это часть из файла. Как получить доступ, перебрать и вывести "currencies"? На данный момент вывожу всё, но как добраться до "currencies" не пойму.

JSONParser parser = new JSONParser();  
JSONObject jsonObject = (JSONObject) parser.parse(new FileReader("cur.json"));
String objName = (String) jsonObject.get("sourceId");
             System.out.println("Title: "+objName);
             JSONArray org= (JSONArray) jsonObject.get("organizations");
            // for(int i=0; i<org.size(); i++){System.out.println("The " + i + " element of the array: "+org.get(i));}
             Iterator i = org.iterator();
             while (i.hasNext())
             {
       JSONObject innerObj = (JSONObject) i.next();
       System.out.println("Банк: "+ innerObj.get("title") + " Адрес: " + innerObj.get("address"));
     }

Используется json-simple.

Answer 1

Если всё-таки интересует решение для simple-json, то можно вспомнить, что JSONObject является наследником HashMap, соответственно можно воспользоваться методом HashMap::entrySet:

JSONObject currencies = (JSONObject) innerObj.get("currencies")
for (Map.Entry<String, Object> entry : currencies.entrySet()) {
    String currency = entry.getKey();
    JSONObject currencyInfo = (JSONObject) entry.getValue();
    // ...
}

Но вообще лучше использовать не simple-json, а что-нибудь другое, например gson.

Answer 2

Вы зачем-то усложняете:

String sourceString = ""; // весь json считываем в строку
JSONObject full = new JSONObject(sourceString);
String sourceId = full.getString("sourceId");
JSONArray organizations = full.getJSONArray("organizations");

И далее по аналогии. Я привел пример использования библиотеки org.json.

В другом ответе (Пожалуйста, помогите распарсить JSON) я также показывал, как можно парсить json и другими библиотеками.

По поводу конкретно вашего json - в этом моменте:

"organizations": [{
 {

Не совсем понятно, что содержится. Элементы либо содержатся в jsonarray под индексами:

{"response":["item1",1,false]}

Либо в jsonobject под ключами:

{"response":{"key":"value"}}

У вас же jsonobject, видимо, каким-то образом находится прямо внутри jsonobject: [{{ в примере строчки, что я привел чуть выше. Видимо, вы что-то не так скопировали.

READ ALSO
NullPointerException при вызове метода setVisibility

NullPointerException при вызове метода setVisibility

В погодном приложении выдает ошибку NullPointerException на строчке: mWeatherLayoutsetVisibility(View

260
java сумма элементов двумерного массива

java сумма элементов двумерного массива

Есть какой-то быстрый алгоритм нахождения суммы всех чисел двумерного массива на java? Кроме этого ничего не нашел толкомЯ так понимаю, что...

283
getActivity().findViewById(R.id.towrite) иногда возвращает null

getActivity().findViewById(R.id.towrite) иногда возвращает null

Пытаюсь получить и изменить xml элемент Активити, находясь внутри Фрагмента

334
Данные для приложения на Android

Данные для приложения на Android

Пишу приложение, которое должно выдавать информацию о мероприятиях проходящих в том или ином городеЯ столкнулся с проблемой - где брать данные...

229