【问题标题】:Preventing Gson deserializing JSON String of a List to actual ArrayList防止 Gson 将 List 的 JSON 字符串反序列化为实际的 ArrayList
【发布时间】:2014-10-01 23:14:35
【问题描述】:

这是我的代码

Gson gson = new Gson();
HashMap<String, String> map = new HashMap<>();
map = gson.fromJson(new FileReader(inputFile), map.getClass());

inputFile的内容是

{
  "key1": "[\"value1\"]",
  "key2": "value2"
}

当我在Eclipse中调试时检查map.get("key2")的值时,该值实际上是(java.util.ArrayList&lt;E&gt;) [value1]

如何让 Gson 将内容反序列化为

{key1="[value1]", key2=value2}

谢谢

【问题讨论】:

    标签: java gson deserialization json-deserialization


    【解决方案1】:

    我觉得你看到的是HashMap#toString() 的输出

    {key1=["value1"], key2=value2}
    

    并认为

    ["value1"] 
    

    是某种类型的List,包含String 值"value1"。

    不是。您的String,作为String 文字,将表示为"[\"value1\"]"。它的值为["value1"]。这就是显示的内容。

    您的两个 JSON 键值条目都是 string-string,并且将按原样进行转换。

    "key1": "[\"value1\"]",
    //      ^ indicates a JSON string
    

    【讨论】:

    • 我试过的测试代码 sn-p 也可以工作,无论是从文件中加载源字符串还是从内存中的变量加载。完整的情况是我有一些其他代码可以从 S3 下载文件并返回一个 File 对象。如果我不将文件写入本地文件,我会收到此反序列化错误。在本地写入文件并使用 FileReader 重新打开本地文件并将其传递给 fromJson 方法后,一切都按预期工作。
    • @derrdji 那么这只是解释问题还是其他什么?
    猜你喜欢
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多