1

我需要从以下 JSON 中提取 RecordOne 的值。

{
  "errors": [],
  "data": {
    "paging": {
      "RecordOne": 8,
      "RecordTwo": 9,
      "recordThree": 2,
      "totalNumberOfRecords": 86052
    },
    "products": [
      {
        "testabstract": "test data",
        "authors": "Frank Jr.",
        "invertedauthors": "Frank VJr.",
        "formatCode": "KND"
      }
     ]
   }
}

我使用 Java 作为语言和 JSON 对象来实现相同的目标,以下是我正在使用的:

protected String getTokenValueUnderHeirarchy(String responseString){
        JSONObject json = new JSONObject(responseString);
        String val= json.getJSONObject("data").getJSONObject("paging").getString("RecordOne");
        System.out.println("val::"+val);
return val;
    }

我得到 val = 1 的值,它应该是 8

如果我尝试使用相同的代码为键totalNumberOfRecords寻找值,它会返回正确的值,即 86052

我知道这很愚蠢,但我无法抓住它。

4

1 回答 1

1

当我使用 JSON 示例运行您的代码时,我最终得到了“JSONException: JsonObject["RecordOne"] is not a string”..... 它不是。用双引号将 8 括起来:“8”返回您期望的值。您可以使用其他 get 方法访问此值:如果您愿意,可以使用 getInt。

此测试用例同时解析 String 和 int。我从你的例子中提取了这个。它适合你吗?

package org.nadnavillus.test;

import org.json.JSONObject;
import org.junit.Test;

public class TestCase {

    protected String getTokenValueUnderHeirarchy(String responseString) throws Exception {
        JSONObject json = new JSONObject(responseString);
       String val= json.getJSONObject("data").getJSONObject("paging").getString("RecordOne");
        System.out.println("val::"+val);
        return val;
    }

    protected String getTokenValueUnderHeirarchyInt(String responseString) throws Exception {
        JSONObject json = new JSONObject(responseString);
        int val= json.getJSONObject("data").getJSONObject("paging").getInt("RecordTwo");
        System.out.println("val::"+val);
        return String.valueOf(val);
    }

    @Test
    public void testJson() throws Exception {
        String input = "{\"errors\": [], \"data\": {\"paging\": {\"RecordOne\": \"8\", \"RecordTwo\": 9, \"recordThree\": 2, \"totalNumberOfRecords\": 86052}}}";
        String test = this.getTokenValueUnderHeirarchy(input);
        System.out.println(test);
        test = this.getTokenValueUnderHeirarchyInt(input);
        System.out.println(test);
    }
}
于 2017-01-03T21:05:39.413 回答