java - GSON:无法正确解析 JSON 对象

标签 java json parsing gson

我正在尝试使用 GSON 解析如下 JSON 对象:

{
 "key1":"someValue",
 "key2":{   
            "anotherKey1":"212586425",
            "anotherKey2":"Martin"
         }
}

这是代码:

Data data = new Gson().fromJson(json, Data.class);

这是Data类:

public class Data {

        public String key1;
        public Map key2; //This will break everything.
}

我所期望的(我是 GSON 的新手)是它会生成 key2 的值作为 Map 对象。

但是,我收到错误Expected BEGIN_OBJECT but was STRING,这让我认为我正在传递一个String,而我应该在其中传递一个 JSON 对象。

GSON不是解析我一开始传递的整个JSON字符串吗?所以最终,我希望新的数据源是一个 Map 对象。这可行吗?

最佳答案

让 Gson 来做这项工作。我将数据定义为

package stackoverflow.questions.q19228349;

public class Data {

    @Override
    public String toString() {
        return "Data [key1=" + key1 + ", key2=" + key2 + "]";
    }
    public String key1;
    public Object key2;

}

然后我可以解析这两种情况的 key2:

package stackoverflow.questions.q19228349;

import com.google.gson.Gson;

public class Q19228349 {


    public static void main(String[] args){
    String json =
            "{\"key1\":\"someValue\","+
            "\"key2\":{   "+
            "           \"anotherKey1\":\"212586425\","+
            "           \"anotherKey2\":\"Martin\""+
            "        }"+
            " }";

    String json2 =
            "{\"key1\":\"someValue\","+
            "\"key2\":\"aString\""+
            " }";

        Gson g = new Gson();
        Data d = g.fromJson(json, Data.class); 
        System.out.println("First: " +d);

        Data d2 = g.fromJson(json2, Data.class); 
        System.out.println("Second: "+d2);
    }


}

这是结果:

First: Data [key1=someValue, key2={anotherKey1=212586425, anotherKey2=Martin}] Second: Data [key1=someValue, key2=aString]

关于java - GSON:无法正确解析 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19228349/

相关文章:

java - ProcessBuilder 和 ssh 调用远程命令

Java BufferedOutputStream : How many bytes to write

java - 如何使用 jolt 库在列表中转换列表

python - 解析 xml 时保留实体引用

java - Spring Boot + 云 | Zuul 代理 |集成测试

java - 通过从另一个文件逐行读取来加载属性文件

使用 JSONParser 的 java.lang.NullpointerException

reactjs - MUI 芯片作为可以选择的标签(类似复选框的行为)

javascript - 使用 Javascript 解析文本

python - Python 代码中的十六进制模式解析(使用位串)