如何使用JSON.simple库读取JSON文件?

时间:2014-01-04 18:29:56

标签: java json

我正在尝试使用json简单库解析json文件,但是我在解析json文件时遇到了一些麻烦。我做了一些搜索但是每个示例的json文件的格式都与我正在使用的格式不同。我能够查询完整的json文件,但是我无法从我的json文件中获取特定的信息并将其添加到列表中(列表变为空)。

有问题的json文件(为简单起见,这是原始文件的片段):

{
"status": "ok",
"count": "2",
"data":{
    "1":{
        "country": "U.S.A.",
        "name": "Jeremy",
        "id": 1
    },
    "3":{
        "country": "U.K.",
        "name": "Dell",
        "id": 3
    }
}

}

我尝试使用的代码:

List<String> list = new ArrayList<String>();
String json = myJSONFile; // myJSONFile is a place holder for the location of the file.
JSONObject jsonObject = (JSONObject) JSONValue.parse(json);
JSONObject data = (JSONObject) jsonObject.get("data");
for (int x = 0; y > data.size(); y++)
{
    JSONObject id = (JSONObject) data.get(y + "");
    list.add((String) id.get("name");
}

// Used to show if the list is empty or not.
JOptionPane.showMessageDialog(null, list);

1 个答案:

答案 0 :(得分:0)

正如评论中指出的那样,JSON不是有效的。您可以尝试解析它here

正确的JSON似乎是:

{
    "status": "ok",
    "count": "2",
    "data": {
        "1": {
            "country": "U.S.A.",
            "name": "Jeremy",
            "id": 1
        },
        "3": {
            "country": "U.K.",
            "name": "Jeremy",
            "id": 3
        }
    }
}

代码中的一些错误:

1)您正在尝试解析JSON文件位置而不读取它。您需要先读取包含JSON字符串

的文件
List<String> list = new ArrayList<String>();
String json = "..\\json.txt";
JSONParser parser = new JSONParser();
Object parsed = parser.parse(new FileReader(json));
JSONObject jsonObject = (JSONObject) parsed;

2)你的循环没有多大意义。在这里,您要尝试迭代由JSONObject

代表的data返回的密钥
JSONObject data = (JSONObject) jsonObject.get("data");
Iterator<?> keys = data.keySet().iterator();

    while (keys.hasNext()) {
            if (data.get(keys.next()) instanceof JSONObject) {
                JSONObject id = (JSONObject) data.get(keys.next());

                list.add((String) id.get("name"));
                System.out.println("Yo => " + (String) id.get("name"));
            }

        }

以下是完整的工作示例,根据您的需要进行修改,使其更具通用性和最佳实践:

public static void main(String... args) {

    try {
        List<String> list = new ArrayList<String>();
        String json = "..\\json.txt"; //Location of your json file
        JSONParser parser = new JSONParser();

        Object parsed = parser.parse(new FileReader(json));
        JSONObject jsonObject = (JSONObject) parsed;

        JSONObject data = (JSONObject) jsonObject.get("data");
        Iterator<?> keys = data.keySet().iterator();

        while (keys.hasNext()) {
            if (data.get(keys.next()) instanceof JSONObject) {
                JSONObject id = (JSONObject) data.get(keys.next());

                list.add((String) id.get("name"));
                System.out.println("Yo => " + (String) id.get("name"));
            }

        }

        // Used to show if the list is empty or not.
        JOptionPane.showMessageDialog(null, list);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

<强>输出:

enter image description here