【问题标题】:Handling JSON with Java [-Jackson-]. Cannot deserialize使用 Java [-Jackson-] 处理 JSON。无法反序列化
【发布时间】:2011-12-05 15:13:51
【问题描述】:

我有一个 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。

但是使用 Jackson 库会出错:

线程“main”中的异常 org.codehaus.jackson.map.JsonMappingException:无法反序列化 START_ARRAY 令牌中的 java.util.LinkedHashMap 实例 [来源: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"));

    }
}

谁能告诉我哪里出了问题和解决办法?

谢谢。

【问题讨论】:

    标签: java php json jackson


    【解决方案1】:

    "[{}]" 是哈希列表,您正在尝试序列化为哈希。请尝试以下操作。

    List<Map<String, Object>> fwers = mapper.readValue(yourString, new TypeReference<List<Map<String, Object>>>() {})
    

    【讨论】:

    • 您的代码有错误。我不知道请在哪里查看。
    • 你好,谢谢,但是说我有嵌套的 JSON(见这里 pastebin.com/NxQf2mq3 )。我可以这样做fwers.get(0).get("status") 来获取本身是 json 对象的状态,我如何获得像 text 这样的内部元素?
    • ((Map) fwers.get(0).get("status")).get("retweet_count") 如果所有的演员都开始觉得恶心,你可以使用Beans 做你的序列化wiki.fasterxml.com/JacksonDataBinding
    【解决方案2】:

    我第一次查看 json 字符串时感觉有些不对劲。您的 json 中有 stdClass。如果我没记错的话是不能翻译成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}]"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-02
      • 2018-12-16
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 2020-11-23
      相关资源
      最近更新 更多