Как распарсить json в java?

484
14 января 2017, 11:48

Как распарсить такой код?

{
    "prim1":
    {
        "age": 100,
        "name": "mky100.com",
        "messages": [
            "msg 100",
            "msg 200",
            "msg 300"
        ]
    },
    "prim2":
    {
        "age": 90,
        "name": "mky90.com",
        "messages": [
            "msg 90",
            "msg 200",
            "msg 300"
        ]
    },
    "prim3":
    {
        "age": 80,
        "name": "mky80.com",
        "messages": [
            "msg 80",
            "msg 200",
            "msg 300"
        ]
    }
}

Пытаюсь так, но выводит ошибки:

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class aa {
  public static void main(String[] args) {
    JSONParser parser = new JSONParser();
    try {
      Object obj = parser.parse(new FileReader("/Users/Katerina/Desktop/Java обучение/aa.json "));
      JSONObject jsonObject = (JSONObject) obj;
      JSONArray prim = jsonObject.getAsJsonArray("prim1");
      for (JSONArray user : prim) {
        JSONObject userObject = user.getAsJsonArray();
        userObject.get("name"); 
        String name = (String) jsonObject.get("name");
        System.out.println(name);
        long age = (Long) jsonObject.get("age");
        System.out.println(age);
        // loop array
        JSONArray msg = (JSONArray) jsonObject.get("messages");
        Iterator<String> iterator = msg.iterator();
        while (iterator.hasNext()) {
          System.out.println(iterator.next());
        }
      }
    } catch (FileNotFoundException e) {
      e.printStackTrace();
      System.out.println("1111");
    } catch (IOException e) {
      e.printStackTrace();
      System.out.println("2222");
    } catch (ParseException e) {
      e.printStackTrace();
      System.out.println("3333");
    }
  }
}

Ошибки:

/Users/Katerina/Desktop/Java обучение/aa.java:20: error: cannot find symbol
        JSONArray prim = jsonObject.getAsJsonArray("prim1");
                                   ^
  symbol:   method getAsJsonArray(String)
  location: variable jsonObject of type JSONObject
/Users/Katerina/Desktop/Java обучение/aa.java:21: error: incompatible types
        for (JSONArray user : prim) {
                              ^
  required: JSONArray
  found:    Object
/Users/Katerina/Desktop/Java обучение/aa.java:22: error: cannot find symbol
            JSONObject userObject = user.getAsJsonArray();
                                        ^
  symbol:   method getAsJsonArray()
  location: variable user of type JSONArray
/Users/Katerina/Desktop/Java обучение/aa.java:33: warning: [unchecked] unchecked conversion
        Iterator<String> iterator = msg.iterator();
                                                ^
  required: Iterator<String>
  found:    Iterator
3 errors
1 warning
Answer 1

Очевидно, это ошибка компиляции. Видимо не та библиотека или версия.

С библиотекой json-simple:

<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

Это делается следующим образом:

String filename = "file.json";
try (BufferedReader reader = Files.newBufferedReader(filename)) {
        JSONParser parser = new JSONParser();
        JSONObject jsonObject = (JSONObject) parser.parse(reader);
        ((Map<String, JSONObject>) jsonObject)
                .entrySet()
                .forEach(entry -> {
                    String key = entry.getKey();
                    JSONObject people = entry.getValue();
                    System.out.println(key);
                    System.out.println(people.get("age"));
                    System.out.println(people.get("name"));
                    JSONArray messages = (JSONArray) people.get("messages");
                    messages.forEach(System.out::println);
                });
    }
READ ALSO
IDEA смена версии maven проектов из IDE

IDEA смена версии maven проектов из IDE

Как средствами IDE сменить версию всех проектов, дочерних от корневого? Есть maven команда, которая это делает из консоли (чуть позже её добавлю,...

341
Как убрать расстояние между картинками?

Как убрать расстояние между картинками?

Как уменьшить расстояние между дивами? чтоб было, как на картинке?

419
Каким образом вы бы это реализовали [требует правки]

Каким образом вы бы это реализовали [требует правки]

Есть в макете такой элементОднако я уже второй день ломаю голову и никак не могу придумать как такое можно релизовать, работая с бутстрапом

438