Обработка JSON с помощью Java [-Jackson-].Не может десериализовать - PullRequest
4 голосов
/ 05 декабря 2011

У меня есть строка JSON:

"[{\"is_translator\":false,\"follow_request_sent\":false,\"statuses_count\":1058}]"

Используя PHP json_decode() на строке и делая print_r, выводится:

Array
(
    [0] => stdClass Object
        (
            [is_translator] => 
            [follow_request_sent] => 
            [statuses_count] => 1058
        )

)

Это показывает, что это действительноJSON.

Однако использование библиотеки Джексона приводит к ошибке:

Исключение в потоке "main" org.codehaus.jackson.map.JsonMappingException: Невозможно десериализовать экземпляр java.util..LinkedHashMap из токена START_ARRAY по адресу [Источник: java.io.StringReader@a761fe;строка: 1, столбец: 1]

Вот простой код:

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;

public class tests {
public static void main(String [] args) throws IOException{
    ObjectMapper mapper = new ObjectMapper();
    Map<String, Object> fwers = mapper.readValue("[{\"is_translator\":false,\"follow_request_sent\":false,\"statuses_count\":1058}]", new TypeReference <Map<String, Object>>() {});
    System.out.println(fwers.get("statuses_count"));

    }
}

Может кто-нибудь сказать мне, что не так и решение?

Спасибо.

Ответы [ 2 ]

6 голосов
/ 05 декабря 2011

"[{}]" - это список хэшей, и вы пытаетесь сериализовать в хэш. Попробуйте следующее.

List<Map<String, Object>> fwers = mapper.readValue(yourString, new TypeReference<List<Map<String, Object>>>() {})
2 голосов
/ 05 декабря 2011

Что-то не так, когда я впервые посмотрел на строку json. У вас есть stdClass в вашем JSON. Если я не ошибаюсь, это не может быть переведено на Java.

Чтобы преобразовать его в json, сделайте следующее:

$json = "[{\"is_translator\":false,\"follow_request_sent\":false,\"statuses_count\":1058}]";
$arr = json_decode($json);
var_dump(json_encode( array( (array) $arr[0] ) ) );

Это выведет другой тип json:

"[{"is_translator":false,"follow_request_sent":false,"statuses_count":1058}]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...