如何使用简单的 JSON 库将 json 文件读入 java

新手上路,请多包涵

我想用 json 简单库用 java 阅读这个 JSON 文件。

我的 JSON 文件如下所示:

 [
    {
        "name":"John",
        "city":"Berlin",
        "cars":[
            "audi",
            "bmw"
        ],
        "job":"Teacher"
    },
    {
        "name":"Mark",
        "city":"Oslo",
        "cars":[
            "VW",
            "Toyata"
        ],
        "job":"Doctor"
    }
]

这是我为读取此文件而编写的 java 代码:

 package javaapplication1;
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 JavaApplication1 {
    public static void main(String[] args) {

        JSONParser parser = new JSONParser();

        try {
            Object obj = parser.parse(new FileReader("c:\\file.json"));

            JSONObject jsonObject =  (JSONObject) obj;

            String name = (String) jsonObject.get("name");
            System.out.println(name);

            String city = (String) jsonObject.get("city");
            System.out.println(city);

            String job = (String) jsonObject.get("job");
            System.out.println(job);

            // loop array
            JSONArray cars = (JSONArray) jsonObject.get("cars");
            Iterator<String> iterator = cars.iterator();
            while (iterator.hasNext()) {
             System.out.println(iterator.next());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

但我得到以下异常:

线程“主”java.lang.ClassCastException 中的异常:org.json.simple.JSONArray 无法在 javaapplication1.JavaApplication1.main(JavaApplication1.java:24) 处转换为 org.json.simple.JSONObject

有人可以告诉我我做错了什么吗?整个文件是一个数组,文件的整个数组中有对象和另一个数组(汽车)。但我不知道如何将整个数组解析为 java 数组。我希望有人可以帮助我解决我的代码中缺少的代码行。

谢谢

原文由 billz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 681
1 个回答

整个文件是一个数组,文件的整个数组中有对象和其他数组(例如汽车)。

正如您所说,JSON blob 的最外层是一个数组。因此,您的解析器将返回 JSONArray 。然后你可以从数组中得到 JSONObject s …

   JSONArray a = (JSONArray) parser.parse(new FileReader("c:\\exer4-courses.json"));

  for (Object o : a)
  {
    JSONObject person = (JSONObject) o;

    String name = (String) person.get("name");
    System.out.println(name);

    String city = (String) person.get("city");
    System.out.println(city);

    String job = (String) person.get("job");
    System.out.println(job);

    JSONArray cars = (JSONArray) person.get("cars");

    for (Object c : cars)
    {
      System.out.println(c+"");
    }
  }

有关参考,请参阅 json-simple 解码示例 页面上的“示例 1”。

原文由 Greg Kopff 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题