2014-10-06 1 views
1

Я новичок в JSON и REST. Я использую SpringTemplate Spring для использования JSON. Я был в состоянии сделать это с этим ответом JSON с этим API вызова: http://data.fcc.gov/api/block/find?latitude=39.9936&longitude=-105.0892&showall=false&format=jsonКак использовать REST в Spring/Java с неназванными значениями JSON?

JSON Response:

{"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&for=tract:060800&in=state:08+county:013&key=

Это JSON ответ я получаю:

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

Как вы можете видеть все «против ariables 'не являются именами и массивами. Я не уверен, как это использовать, используя SpringTemplate Spring с помощью POJO.

Это код 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 
+0

Это массив массивов, имитирующий стандартный CSV-файл (где первая строка содержит имена столбцов). В чем заключается трудность? (Подсказка: Вселенная не состоит полностью из POJO.) –

+0

Я предполагаю, что я незнакомый разбор Json любым другим способом, вы могли бы порекомендовать или связать любые другие методы разбора Json, которые могли бы работать для моего примера? Ссылка, размещенная ниже Dino Tw, оказалась полезной. –

+0

«Любой другой способ» - это * нормальный * способ, где вы создаете «гнездо» списков и карт вместо использования Jacksonesque POJO. Перейдите на json.org - внизу страницы находятся около 20 наборов Java JSON на выбор. –

ответ

-1

Ответ от переписи является массивом значения, нет объекта ключа-значения, не используйте POJO для отображения. ObjectMapper # readValue() из Jackson может помочь вам облегчить задачу анализа. Посмотрите раздел Пример модели дерева в примерах JacksonInFiveMinutes.

0

Реальная проблема заключается в том, что вы не расширили переменные для создания сопоставлений. Вам необходимо создать сопоставления объектов для Census Data API: Variables.. Дальнейшая интроспекция параметра запроса для B19001_002E, расширяется до определения и соответствующего json для Less than 10,000. Что содержит следующее определение.

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

Как только вы успешно создали это POJO, вы можете ссылаться на ответы и перейти к следующему вызову.