当前位置: 首页 > 知识库问答 >
问题:

如何使用JSON未命名值在Spring/Java中使用REST?

盛跃
2023-03-14

我是JSON和REST的新手。我正在使用Spring的RestTemboard来使用JSON。我能够通过这个API调用使用这个JSON响应来做到这一点:http://data.fcc.gov/api/block/find?latitude=39.9936

JSON响应:

    {"Block":{"FIPS":"080130608005010"},"County":
    {"FIPS":"08013","name":"Boulder"},"State":
    {"FIPS":"08","code":"CO","name":"Colorado"},"status":"OK","executionTime":"8"}

然而,当我从这个请求中获取这个FIPS代码,并尝试使用它通过这个调用从人口普查中请求信息时:http://api.census.gov/data/2012/acs5?get=B19001_002E

这是我得到的JSON响应:

    [["B19001_002E","state","county","tract"],
    ["225","08","013","060800"]]

正如您所看到的,所有“变量”都是未命名的并且以数组形式存在。我不确定如何使用POJO使用Spring的RestTemboard使用它。

这是我的Java代码(其中URL是API调用的字符串):

RestTemplate restTemplate = new RestTemplate();
CensusData cd = restTemplate.getForObject(URL, CensusData.class);
System.out.println("data: " + cd.getData());

以下是我的POJO(CensusData):

@JsonIgnoreProperties(ignoreUnknown = true)
public class CensusData {

     @JsonProperty
    private List<List<String>> data;

    public String getData() {
        String str = "";
        for(List<String> list : data) {
            for(String s : list) {
                str += s;
                str += " ";
            }
        }
        return str;
    }
}

问题是,我不知道在我的CensusData对象中如何命名“数据”,因为这些值在JSON响应中未命名。所以我抛出了这个异常:

Exception in thread "main" org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not deserialize instance of template.main.CensusData out of START_ARRAY token

共有3个答案

宿嘉
2023-03-14

来自census的响应是值数组,没有键值对象,映射时不使用POJO。Jackson提供的ObjectMapper#readValue()可以帮助您简化解析任务。查看JacksonInFiveMinutes中的截面树模型示例。

田德馨
2023-03-14

真正的问题是您还没有扩展变量来创建映射。您需要为人口普查数据API:变量创建对象映射。进一步内省B19001_002E的请求参数,扩展到小于10,000的定义和相应的json。其中包含以下定义。

{
    "name": "B19001_002E",
    "label": "Less than $10,000",
    "concept": "B19001.  Household Income",
    "predicateType": "int"
}

成功创建此POJO后,您可以引用响应并继续下一个挑战。

公冶龙野
2023-03-14

使用Gsonhttps://code.google.com/p/google-gson/ .

String result = getResponseFromServer(String url); //restful
Gson gson = new Gson();
String[][] str = gson.fromJson(result, String[][].class);
 类似资料:
  • 问题内容: 我尝试在 Eclipse 中使用,尽管从 IntelliSense 和 Package Explorer 都可以看出,该命名空间不存在。 所以我想除了默认加载的包之外,我还必须加载其他包(在Java中称它们为库吗?)。 这是我当前的设置:( 链接无效 ) 问题答案: 您需要将Apache commons jar文件添加到项目中。您可以从此处选择所需的jar- http ://commo

  • json如下所示: 我读了20多个答案,但找不到如何反序列化这样一个结构,请帮助我了解这个课程是什么样的,因为小时不是一个固定的字符串。

  • 问题内容: 该文档仅提及嵌套类型,但尚不清楚它们是否可用作命名空间。我还没有发现任何有关命名空间的明确提及。 问题答案: 在苹果开发论坛中, SevenTenEleven 回答了: 命名空间不是按文件的;它们是基于目标的(基于“产品模块名称”构建设置)。因此,您最终将得到如下结果: 所有Swift声明都被认为是某个模块的一部分,因此即使您说“ ”(是的,它仍然存在),您也会得到Swift认为的“

  • 问题内容: 我的.aliases中具有以下别名: 并且我想在名称中包含字符串的所有文件中查找不区分大小写的内容: 这是我得到的: 有什么方法可以在xargs中使用别名,还是必须使用完整版本: 注意: 这是一个简单的示例。此外,我还有一些非常复杂的别名,无法轻易手动扩展。 编辑: 我用过,所以请指定答案是否特定于外壳。 问题答案: 别名是外壳特定的- 在这种情况下,很可能是bash特定的。要执行别名

  • 问题内容: 在Oracle“原始数据类型” 页面中,它提到Java 8添加了对无符号int和long的支持: :默认情况下,数据类型是32位带符号的二进制补码整数,其最小值为-2 31,最大值为2 31 -1。 在Java SE 8和更高版本中,可以使用数据类型表示无符号的32位整数,其最小值为0,最大值为2 32 -1。使用该类可将数据类型用作无符号整数。有关更多信息,请参见“数字类”部分。像静

  • 引入Maven依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core-spring-namespace</artifactId> <version>${shardingsphere.version}</version> </depend