【问题标题】:How to parse JSON without having any JSONArray in java?java - 如何在java中没有任何JSONArray的情况下解析JSON?
【发布时间】:2016-07-27 19:51:27
【问题描述】:

我有一个像这样的 json 文件:

{
  "a1" : {
    "Contestant 1 marks" : 44,
    "Contestant 10 marks" : 30,
    "Contestant 11 marks" : 15,
    "Contestant 12 marks" : 35,
    "Contestant 13 marks" : 28,
    "Contestant 14 marks" : 8,
    "Contestant 2 marks" : 35,
    "Contestant 3 marks" : 30.899999618530273,
    "Contestant 4 marks" : 39,
    "Contestant 5 marks" : 45,
    "Contestant 6 marks" : 47,
    "Contestant 7 marks" : 17,
    "Contestant 8 marks" : 37,
    "Contestant 9 marks" : 35
  },
  "a2" : {
    "Contestant 1 marks" : 35,
    "Contestant 10 marks" : 30,
    "Contestant 11 marks" : 15,
    "Contestant 12 marks" : 35,
    "Contestant 13 marks" : 28,
    "Contestant 14 marks" : 8,
    "Contestant 2 marks" : 30,
    "Contestant 3 marks" : 30.899999618530273,
    "Contestant 4 marks" : 39,
    "Contestant 5 marks" : 45,
    "Contestant 6 marks" : 47,
    "Contestant 7 marks" : 17,
    "Contestant 8 marks" : 37,
    "Contestant 9 marks" : 35
  }
}

这里好像有两个 JSON 对象 a1,a2。而这些对象本身就有 14 个 JSON 对象。

我有一个 String completeJson;,其中包含完整的 JSON。

现在我写的时候

JSONObject jsonRootObj = new JSONObject(completeJson);

那么json对象会进入jsonRootObj呢?

另外,我如何在我的 JSON 文件中获取密钥的值:a1 和 a2 的“参赛者 1 分数”?

我想将a1 中的对象的值与a2 中具有相同KEY 的对象的值相加。

【问题讨论】:

  • jsonRootObj.get("a1").get("Contestant 1 scores") 因为您发布的json不包含任何数组
  • 对不起,你需要投:((JSONObject)jo.get("a1")).get("参赛者1分")

标签: java json


【解决方案1】:

这样你就可以从 A1 中获取值了:

long valA1 = ((Long)((JSONObject)jo.get("a1")).get("Contestant 1 marks")).longValue();

这样你把A2放进去:

((JSONObject)((JSONObject)jo.get("a2")).get("Contestant 1 marks")).put("Contestant 1 marks", valA1);

jo 在哪里:

JSONParser jp = new JSONParser();
JSONObject jo = (JSONObject)jp.parse(<your json string>);

【讨论】:

    【解决方案2】:

    你可以得到解析a1a2为JSONObject,然后改变值。

    JSONObject jsonRootObj = JSON.parseObject(completeJson);
    JSONObject a1 = jsonRootObj.getJSONObject("a1");
    JSONObject a2 = jsonRootObj.getJSONObject("a2");
    for (Map.Entry<String, Object> entry : a1.entrySet()) {
        if (a2.containsKey(entry.getKey())) {
            a2.put(entry.getKey(), entry.getValue());
        }
    }
    

    P.S:我的 JSON 解析器是 fastjson

    【讨论】:

    • 写作JSONObject a1 = jsonRootObj.getJSONObject("a1"); 抛出异常:- org.json.JSONException: JSONObject["a1"] not found.
    • 你用的是哪个 JSON Parser
    • java-json.jar 是我添加到引用库中的文件。你能告诉我如何将 fastjson 添加到我的项目中吗?
    • 可以在this link下载jar或者使用maven &lt;dependency&gt;&lt;groupId&gt;com.alibaba&lt;/groupId&gt;&lt;artifactId&gt;fastjson&lt;/artifactId&gt;&lt;version&gt;1.2.14&lt;/version&gt; &lt;/dependency&gt;
    【解决方案3】:

    您的 JSON 字符串包含一个无名的根元素,从第一个 { 开始,到最后一个 } 结束。该对象将进入jsonRootObj 变量。要获取 a1a2 对象,请执行以下操作:

    JSONObject a1 = jsonRootObj.getJSONObject("a1");
    

    要获取a1中第一个参赛者的值,可以这样做:

    int marks = a1.getInt("Contestant 1 marks");
    

    您可以找到 JSONObject here 的完整 Javadoc。不需要 JSON 数组。

    【讨论】:

    • @AmitUpadhyay 您确定 completeJson 变量包含您在问题中发布的 JSON 代码吗?
    【解决方案4】:

    让您的生活更轻松。

    下载gson library

    在项目上右击,Build Path->Add External Archives。

    然后用你想要的任何名称创建一个类(我使用了 Example.java):

    import com.google.gson.annotations.Expose;
    import com.google.gson.annotations.SerializedName;
    
    public class Example {
    
        @SerializedName("a1")
        @Expose
        private A1 a1;
        @SerializedName("a2")
        @Expose
        private A2 a2;
    
        /**
         * @return The a1
         */
        public A1 getA1() {
            return a1;
        }
    
        /**
         * @param a1 The a1
         */
        public void setA1(A1 a1) {
            this.a1 = a1;
        }
    
        /**
         * @return The a2
         */
        public A2 getA2() {
            return a2;
        }
    
        /**
         * @param a2 The a2
         */
        public void setA2(A2 a2) {
            this.a2 = a2;
        }
    
        public class A1 {
    
            @SerializedName("Contestant 1 marks")
            @Expose
            private int contestant1Marks;
            @SerializedName("Contestant 10 marks")
            @Expose
            private int contestant10Marks;
            @SerializedName("Contestant 11 marks")
            @Expose
            private int contestant11Marks;
            @SerializedName("Contestant 12 marks")
            @Expose
            private int contestant12Marks;
            @SerializedName("Contestant 13 marks")
            @Expose
            private int contestant13Marks;
            @SerializedName("Contestant 14 marks")
            @Expose
            private int contestant14Marks;
            @SerializedName("Contestant 2 marks")
            @Expose
            private int contestant2Marks;
            @SerializedName("Contestant 3 marks")
            @Expose
            private float contestant3Marks;
            @SerializedName("Contestant 4 marks")
            @Expose
            private int contestant4Marks;
            @SerializedName("Contestant 5 marks")
            @Expose
            private int contestant5Marks;
            @SerializedName("Contestant 6 marks")
            @Expose
            private int contestant6Marks;
            @SerializedName("Contestant 7 marks")
            @Expose
            private int contestant7Marks;
            @SerializedName("Contestant 8 marks")
            @Expose
            private int contestant8Marks;
            @SerializedName("Contestant 9 marks")
            @Expose
            private int contestant9Marks;
    
            /**
             * @return The contestant1Marks
             */
            public int getContestant1Marks() {
                return contestant1Marks;
            }
    
            /**
             * @param contestant1Marks The Contestant 1 marks
             */
            public void setContestant1Marks(int contestant1Marks) {
                this.contestant1Marks = contestant1Marks;
            }
    
            /**
             * @return The contestant10Marks
             */
            public int getContestant10Marks() {
                return contestant10Marks;
            }
    
            /**
             * @param contestant10Marks The Contestant 10 marks
             */
            public void setContestant10Marks(int contestant10Marks) {
                this.contestant10Marks = contestant10Marks;
            }
    
            /**
             * @return The contestant11Marks
             */
            public int getContestant11Marks() {
                return contestant11Marks;
            }
    
            /**
             * @param contestant11Marks The Contestant 11 marks
             */
            public void setContestant11Marks(int contestant11Marks) {
                this.contestant11Marks = contestant11Marks;
            }
    
            /**
             * @return The contestant12Marks
             */
            public int getContestant12Marks() {
                return contestant12Marks;
            }
    
            /**
             * @param contestant12Marks The Contestant 12 marks
             */
            public void setContestant12Marks(int contestant12Marks) {
                this.contestant12Marks = contestant12Marks;
            }
    
            /**
             * @return The contestant13Marks
             */
            public int getContestant13Marks() {
                return contestant13Marks;
            }
    
            /**
             * @param contestant13Marks The Contestant 13 marks
             */
            public void setContestant13Marks(int contestant13Marks) {
                this.contestant13Marks = contestant13Marks;
            }
    
            /**
             * @return The contestant14Marks
             */
            public int getContestant14Marks() {
                return contestant14Marks;
            }
    
            /**
             * @param contestant14Marks The Contestant 14 marks
             */
            public void setContestant14Marks(int contestant14Marks) {
                this.contestant14Marks = contestant14Marks;
            }
    
            /**
             * @return The contestant2Marks
             */
            public int getContestant2Marks() {
                return contestant2Marks;
            }
    
            /**
             * @param contestant2Marks The Contestant 2 marks
             */
            public void setContestant2Marks(int contestant2Marks) {
                this.contestant2Marks = contestant2Marks;
            }
    
            /**
             * @return The contestant3Marks
             */
            public float getContestant3Marks() {
                return contestant3Marks;
            }
    
            /**
             * @param contestant3Marks The Contestant 3 marks
             */
            public void setContestant3Marks(float contestant3Marks) {
                this.contestant3Marks = contestant3Marks;
            }
    
            /**
             * @return The contestant4Marks
             */
            public int getContestant4Marks() {
                return contestant4Marks;
            }
    
            /**
             * @param contestant4Marks The Contestant 4 marks
             */
            public void setContestant4Marks(int contestant4Marks) {
                this.contestant4Marks = contestant4Marks;
            }
    
            /**
             * @return The contestant5Marks
             */
            public int getContestant5Marks() {
                return contestant5Marks;
            }
    
            /**
             * @param contestant5Marks The Contestant 5 marks
             */
            public void setContestant5Marks(int contestant5Marks) {
                this.contestant5Marks = contestant5Marks;
            }
    
            /**
             * @return The contestant6Marks
             */
            public int getContestant6Marks() {
                return contestant6Marks;
            }
    
            /**
             * @param contestant6Marks The Contestant 6 marks
             */
            public void setContestant6Marks(int contestant6Marks) {
                this.contestant6Marks = contestant6Marks;
            }
    
            /**
             * @return The contestant7Marks
             */
            public int getContestant7Marks() {
                return contestant7Marks;
            }
    
            /**
             * @param contestant7Marks The Contestant 7 marks
             */
            public void setContestant7Marks(int contestant7Marks) {
                this.contestant7Marks = contestant7Marks;
            }
    
            /**
             * @return The contestant8Marks
             */
            public int getContestant8Marks() {
                return contestant8Marks;
            }
    
            /**
             * @param contestant8Marks The Contestant 8 marks
             */
            public void setContestant8Marks(int contestant8Marks) {
                this.contestant8Marks = contestant8Marks;
            }
    
            /**
             * @return The contestant9Marks
             */
            public int getContestant9Marks() {
                return contestant9Marks;
            }
    
            /**
             * @param contestant9Marks The Contestant 9 marks
             */
            public void setContestant9Marks(int contestant9Marks) {
                this.contestant9Marks = contestant9Marks;
            }
    
        }
    
        public class A2 {
    
            @SerializedName("Contestant 1 marks")
            @Expose
            private int contestant1Marks;
            @SerializedName("Contestant 10 marks")
            @Expose
            private int contestant10Marks;
            @SerializedName("Contestant 11 marks")
            @Expose
            private int contestant11Marks;
            @SerializedName("Contestant 12 marks")
            @Expose
            private int contestant12Marks;
            @SerializedName("Contestant 13 marks")
            @Expose
            private int contestant13Marks;
            @SerializedName("Contestant 14 marks")
            @Expose
            private int contestant14Marks;
            @SerializedName("Contestant 2 marks")
            @Expose
            private int contestant2Marks;
            @SerializedName("Contestant 3 marks")
            @Expose
            private float contestant3Marks;
            @SerializedName("Contestant 4 marks")
            @Expose
            private int contestant4Marks;
            @SerializedName("Contestant 5 marks")
            @Expose
            private int contestant5Marks;
            @SerializedName("Contestant 6 marks")
            @Expose
            private int contestant6Marks;
            @SerializedName("Contestant 7 marks")
            @Expose
            private int contestant7Marks;
            @SerializedName("Contestant 8 marks")
            @Expose
            private int contestant8Marks;
            @SerializedName("Contestant 9 marks")
            @Expose
            private int contestant9Marks;
    
            /**
             * @return The contestant1Marks
             */
            public int getContestant1Marks() {
                return contestant1Marks;
            }
    
            /**
             * @param contestant1Marks The Contestant 1 marks
             */
            public void setContestant1Marks(int contestant1Marks) {
                this.contestant1Marks = contestant1Marks;
            }
    
            /**
             * @return The contestant10Marks
             */
            public int getContestant10Marks() {
                return contestant10Marks;
            }
    
            /**
             * @param contestant10Marks The Contestant 10 marks
             */
            public void setContestant10Marks(int contestant10Marks) {
                this.contestant10Marks = contestant10Marks;
            }
    
            /**
             * @return The contestant11Marks
             */
            public int getContestant11Marks() {
                return contestant11Marks;
            }
    
            /**
             * @param contestant11Marks The Contestant 11 marks
             */
            public void setContestant11Marks(int contestant11Marks) {
                this.contestant11Marks = contestant11Marks;
            }
    
            /**
             * @return The contestant12Marks
             */
            public int getContestant12Marks() {
                return contestant12Marks;
            }
    
            /**
             * @param contestant12Marks The Contestant 12 marks
             */
            public void setContestant12Marks(int contestant12Marks) {
                this.contestant12Marks = contestant12Marks;
            }
    
            /**
             * @return The contestant13Marks
             */
            public int getContestant13Marks() {
                return contestant13Marks;
            }
    
            /**
             * @param contestant13Marks The Contestant 13 marks
             */
            public void setContestant13Marks(int contestant13Marks) {
                this.contestant13Marks = contestant13Marks;
            }
    
            /**
             * @return The contestant14Marks
             */
            public int getContestant14Marks() {
                return contestant14Marks;
            }
    
            /**
             * @param contestant14Marks The Contestant 14 marks
             */
            public void setContestant14Marks(int contestant14Marks) {
                this.contestant14Marks = contestant14Marks;
            }
    
            /**
             * @return The contestant2Marks
             */
            public int getContestant2Marks() {
                return contestant2Marks;
            }
    
            /**
             * @param contestant2Marks The Contestant 2 marks
             */
            public void setContestant2Marks(int contestant2Marks) {
                this.contestant2Marks = contestant2Marks;
            }
    
            /**
             * @return The contestant3Marks
             */
            public float getContestant3Marks() {
                return contestant3Marks;
            }
    
            /**
             * @param contestant3Marks The Contestant 3 marks
             */
            public void setContestant3Marks(float contestant3Marks) {
                this.contestant3Marks = contestant3Marks;
            }
    
            /**
             * @return The contestant4Marks
             */
            public int getContestant4Marks() {
                return contestant4Marks;
            }
    
            /**
             * @param contestant4Marks The Contestant 4 marks
             */
            public void setContestant4Marks(int contestant4Marks) {
                this.contestant4Marks = contestant4Marks;
            }
    
            /**
             * @return The contestant5Marks
             */
            public int getContestant5Marks() {
                return contestant5Marks;
            }
    
            /**
             * @param contestant5Marks The Contestant 5 marks
             */
            public void setContestant5Marks(int contestant5Marks) {
                this.contestant5Marks = contestant5Marks;
            }
    
            /**
             * @return The contestant6Marks
             */
            public int getContestant6Marks() {
                return contestant6Marks;
            }
    
            /**
             * @param contestant6Marks The Contestant 6 marks
             */
            public void setContestant6Marks(int contestant6Marks) {
                this.contestant6Marks = contestant6Marks;
            }
    
            /**
             * @return The contestant7Marks
             */
            public int getContestant7Marks() {
                return contestant7Marks;
            }
    
            /**
             * @param contestant7Marks The Contestant 7 marks
             */
            public void setContestant7Marks(int contestant7Marks) {
                this.contestant7Marks = contestant7Marks;
            }
    
            /**
             * @return The contestant8Marks
             */
            public int getContestant8Marks() {
                return contestant8Marks;
            }
    
            /**
             * @param contestant8Marks The Contestant 8 marks
             */
            public void setContestant8Marks(int contestant8Marks) {
                this.contestant8Marks = contestant8Marks;
            }
    
            /**
             * @return The contestant9Marks
             */
            public int getContestant9Marks() {
                return contestant9Marks;
            }
    
            /**
             * @param contestant9Marks The Contestant 9 marks
             */
            public void setContestant9Marks(int contestant9Marks) {
                this.contestant9Marks = contestant9Marks;
            }
    
        }
    
    }
    

    之后,

    String yourString = "json in String format";
    Example example = new Gson().fromJson(yourString, Example.class);
    example.getA1().getContestant1Marks();
    example.getA2().getContestant1Marks();
    

    就是这样。您可以使用这些 getter 方法。

    PS:我使用 jsonschema2pojo 创建了这个类,方法是将你的 json 复制到其中。

    编码愉快...!!!

    【讨论】:

    • 我的 java 项目中没有 gradle .. 我该怎么办?如果我在 android 中执行此操作,那么我将不得不从服务器获取 JSON 文件(但我没有服务器)
    • 你能告诉我如何在eclipse项目中实现你的方法吗?
    • @Ayushibhardwaj 请查看此帖子:stackoverflow.com/a/31829107/1739882
    • @Ayushibhardwaj 你很容易得到 jar 文件。你已经准备好我的代码了。你只需要设法在你的项目中添加这个 jar 文件。试试看。。
    • @AmitUpadhyay 记住.. 这个 Example.java 模型仅适用于问题提供的 JSON。如果您的 JSON 与此不同,则需要从我提到的网站创建另一个模型。
    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 2012-03-23
    • 2019-11-16
    • 1970-01-01
    • 2012-06-21
    • 2018-06-02
    • 2017-05-20
    相关资源
    最近更新 更多