将 JSONObject 转换为字符串和 long return null

Convert JSONObject into string and long return null

jsonobject 转换为 Stringlong 时,它 returns 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 + "");
        }
    }
}

输出:

id null with name null

idname 属于 project JSONObject 所以使用 project JSONObject

得到这两个值

试试这个 for loop

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);

}

问题是,当您尝试获取 idname 时,您不是从 project 而是从包含 project 的对象中获取它。应该有:

  JSONObject innerObj = (JsonObject) ((JSONObject) m.next()).get("project)";

这种代码很快就会变得非常丑陋。相反,您可以使用更高阶的解析器,例如 Jackson。那么你的代码可以更简洁,你不必担心挖掘每个片段的转换 JSON.