首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取嵌套json对象的键值。

获取嵌套json对象的键值。
EN

Stack Overflow用户
提问于 2022-02-16 05:45:15
回答 2查看 2K关注 0票数 -1

我希望使用org.json库获取下一个json文件的键的值:

代码语言:javascript
运行
复制
{
    "1": {
        "subject1": "MIS",
        "subject2": "DBMS",
        "subject3": "UML"
    },
    "2": {
        "subject1": "ART",
        "subject2": "MATH",
        "subject3": "MUSIC"
    },
    "3": {
        "subject1": "HISTORY",
        "subject2": "CHEMISTY",
        "subject3": "BIOLOGY"
    }
}

这就是我尝试过的:

代码语言:javascript
运行
复制
package com.company;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.FileReader;

public class Main {
    public static void main(String[] args) {
        String json = "{\"1\": {\"subject1\": \"MIS\",\"subject2\": \"DBMS\",\"subject3\": \"UML\"},\"2\": {\"subject1\": \"ART\",\"subject2\": \"MATH\",\"subject3\": \"MUSIC\"},\"3\": {\"subject1\": \"HISTORY\",\"subject2\": \"CHEMISTY\",\"subject3\": \"BIOLOGY\"}}";

        try{
            JSONObject root = new JSONObject(json);
            for (int i = 0; i < root.length(); i++) {
                JSONArray subjects = root.getJSONArray(String.valueOf(i+1));

                for (int j = 0; j < subjects.length(); j++) {
                    JSONObject number = subjects.getJSONObject(j);
                    String s1 = number.getString("subject1");
                    String s2 = number.getString("subject2");
                    String s3 = number.getString("subject3");
                    System.out.println(s1+", "+ s2+", "+s3);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

JSONArray subjects = root.getJSONArray(String.valueOf(i+1));在一起我以为我得到的是:

代码语言:javascript
运行
复制
JSONArray subjects = root.getJSONArray("1");
JSONArray subjects = root.getJSONArray("2");
...

但这对我不起作用。我只是在下一个进入控制台:

代码语言:javascript
运行
复制
org.json.JSONException: JSONObject["1"] is not a JSONArray.
    at org.json.JSONObject.wrongValueFormatException(JSONObject.java:2694)
    at org.json.JSONObject.getJSONArray(JSONObject.java:777)
    at com.company.Main.main(Main.java:18)

我想要得到:

代码语言:javascript
运行
复制
MIS, DBMS, UML
ART, MATH, MUSIC
HISTORI, CHEMISTRY, BIOLOGY

你能告诉我我做错了什么吗?我应该使用其他图书馆吗?谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2022-02-16 06:08:57

主题不是一个数组。JSON中的数组将包含在[].To中,您需要遵循下面的方法。

代码语言:javascript
运行
复制
try{
     JSONObject root = new JSONObject(json);
     for (int i = 0; i < 3; i++) {
        JSONObject Obj = root.getJSONObject(String.valueOf(i+1));
        String s1 = Obj.getString("subject1");
        String s2 = Obj.getString("subject2");
        String s3 = Obj.getString("subject3");
        System.out.println(s1+", "+ s2+", "+s3);
      }
  }catch(Exception e){
            e.printStackTrace();
  }

当像下面这样修改时,上面的JSON将变成一个json数组[{"subject1": "MIS","subject2": "DBMS","subject3": "UML"},{"subject1": "ART","subject2": "MATH","subject3": "MUSIC"},{"subject1": "HISTORY","subject2": "CHEMISTY","subject3": "BIOLOGY"}]

然后可以提取如下所述的值,

代码语言:javascript
运行
复制
try{
    JSONArray root = new JSONArray(json);

    for (int i = 0; i < root.length(); i++) {
       JSONObject Obj = root.getJSONObject(i);
       String s1 = Obj.getString("subject1");
       String s2 = Obj.getString("subject2");
       String s3 = Obj.getString("subject3");
       System.out.println(s1+", "+ s2+", "+s3);
   }
}catch(Exception e){
  e.printStackTrace();
}
票数 0
EN

Stack Overflow用户

发布于 2022-02-16 06:13:27

在这之前,你把一切都做对了

代码语言:javascript
运行
复制
JSONArray subjects = root.getJSONArray(String.valueOf(i+1));

您必须获得JSONObject,而不是JSONArray,因为您没有数组。你的第二个错误是这个循环

代码语言:javascript
运行
复制
for (int j = 0; j < subjects.length(); j++) {}

由于您已经手动获取对象,所以不必循环。

最终代码

代码语言:javascript
运行
复制
    String json = "{\"1\": {\"subject1\": \"MIS\",\"subject2\": \"DBMS\",\"subject3\": \"UML\"},\"2\": {\"subject1\": \"ART\",\"subject2\": \"MATH\",\"subject3\": \"MUSIC\"},\"3\": {\"subject1\": \"HISTORY\",\"subject2\": \"CHEMISTY\",\"subject3\": \"BIOLOGY\"}}";

    try {
        JSONObject root = new JSONObject(json);
        for (int i = 0; i < root.length(); i++) {
            JSONObject number = root.getJSONObject(String.valueOf(i + 1));
            String s1 = number.getString("subject1");
            String s2 = number.getString("subject2");
            String s3 = number.getString("subject3");
            System.out.println(s1 + ", " + s2 + ", " + s3);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

输出

代码语言:javascript
运行
复制
MIS, DBMS, UML
ART, MATH, MUSIC
HISTORY, CHEMISTY, BIOLOGY
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71136925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档