![]() |
谦和的弓箭 · DataX-HDFS(读写) - 嘣嘣嚓 ...· 1 年前 · |
![]() |
逆袭的木瓜 · winform的listview,获取单击的 ...· 1 年前 · |
![]() |
魁梧的啄木鸟 · 使用python与opencv解析xml文件 ...· 1 年前 · |
![]() |
阳刚的板凳 · MySQL数据库 - ...· 1 年前 · |
![]() |
英俊的海龟 · 项目优化之Canvas优化(Unity3D) ...· 1 年前 · |
我希望使用
org.json
库获取下一个json文件的键的值:
{
"1": {
"subject1": "MIS",
"subject2": "DBMS",
"subject3": "UML"
"2": {
"subject1": "ART",
"subject2": "MATH",
"subject3": "MUSIC"
"3": {
"subject1": "HISTORY",
"subject2": "CHEMISTY",
"subject3": "BIOLOGY"
}
这就是我尝试过的:
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\"}}";
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));
在一起我以为我得到的是:
JSONArray subjects = root.getJSONArray("1");
JSONArray subjects = root.getJSONArray("2");
...
但这对我不起作用。我只是在下一个进入控制台:
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)
我想要得到:
MIS, DBMS, UML
ART, MATH, MUSIC
HISTORI, CHEMISTRY, BIOLOGY
你能告诉我我做错了什么吗?我应该使用其他图书馆吗?谢谢你的帮助。
发布于 2022-02-16 06:08:57
主题不是一个数组。JSON中的数组将包含在
[
和
]
.To中,您需要遵循下面的方法。
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"}]
然后可以提取如下所述的值,
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();
}
发布于 2022-02-16 06:13:27
在这之前,你把一切都做对了
JSONArray subjects = root.getJSONArray(String.valueOf(i+1));
您必须获得
JSONObject
,而不是
JSONArray
,因为您没有数组。你的第二个错误是这个循环
for (int j = 0; j < subjects.length(); j++) {}
由于您已经手动获取对象,所以不必循环。
最终代码
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);