Java 将JSONObject转换为字符串并长返回null
当Java 将JSONObject转换为字符串并长返回null,java,json,jsonobject,Java,Json,Jsonobject,当jsonobject转换为String或long时,它返回null。为什么? 我的JSON文件: { "memberships": [ { "project": { "id": 30483134480107, "name": "Asana Integrations" }, "section": null } ]
jsonobject
转换为String
或long
时,它返回null
。为什么?
我的JSON文件:
{
"memberships": [
{
"project": {
"id": 30483134480107,
"name": "Asana Integrations"
},
"section": null
}
]
}
我的代码是:
package jsontest;
import java.beans.Statement;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class MoreComplexJson {
private static final String filePath = "C:\\jsonTestFile.json";
public static void main(String[] args) {
try {
FileReader reader = new FileReader(filePath);
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);
JSONArray memberships = (JSONArray) jsonObject.get("memberships");
for (int z = 0; z < memberships.size(); z++) {
Iterator m = memberships.iterator();
// take each value from the json array separately
while (m.hasNext()) {
JSONObject innerObj = (JSONObject) m.next();
Long id = (Long) innerObj.get("id");
String name = (String) innerObj.get("name");
System.out.println("id " + id + " with name " + name);
}
}
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
System.out.println(ex + "");
}
catch (IOException ex) {
ex.printStackTrace();
ex.printStackTrace();
System.out.println(ex + "");
}
catch (ParseException ex) {
ex.printStackTrace();
ex.printStackTrace();
System.out.println(ex + "");
}
catch (NullPointerException ex) {
ex.printStackTrace();
ex.printStackTrace();
System.out.println(ex + "");
}
}
}
包jsontest;
导入java.beans.Statement;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.PreparedStatement;
导入java.sql.SQLException;
导入java.util.Iterator;
导入java.util.Scanner;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入org.json.simple.JSONArray;
导入org.json.simple.JSONObject;
导入org.json.simple.parser.JSONParser;
导入org.json.simple.parser.ParseException;
公共类MoreComplexJson{
私有静态最终字符串filePath=“C:\\jsonTestFile.json”;
公共静态void main(字符串[]args){
试一试{
FileReader=新的FileReader(filePath);
JSONParser JSONParser=新的JSONParser();
JSONObject JSONObject=(JSONObject)jsonParser.parse(reader);
JSONArray成员身份=(JSONArray)jsonObject.get(“成员身份”);
对于(intz=0;z
输出: id为null,名称为null
id
和name
属于project JSONObject
所以使用project JSONObject
对循环尝试此
for (int z = 0; z < memberships.size(); z++) {
JSONObject m = (JSONObject) memberships.get(z);
JSONObject innerObj = (JSONObject) m.get("project");
// If you want section
String section = (String) m.get("section");
System.out.println("section " + section);
Long id = (Long) innerObj.get("id");
String name = (String) innerObj.get("name");
System.out.println("id " + id + " with name " + name);
}
for(int z=0;z
问题在于,当您试图获取id
和name
时,您不是从project
获取它,而是从包含project
的对象获取它。应该有:
JSONObject innerObj = (JsonObject) ((JSONObject) m.next()).get("project)";
这种代码很快就会变得很难看。相反,您可以使用更高阶的解析器,例如。这样,您的代码就可以更加清晰,您就不必担心每一段JSON的转换。如果我也想像项目详细信息一样获取小节详细信息,该怎么办?您使用的JSON库的版本是什么?