簡體   English   中英

將JSONObject轉換為字符串,並長返回null

[英]Convert JSONObject into string and long return null

jsonobject轉換為Stringlong它返回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,名稱為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的轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM