java - 将字符串转换为 gson 对象

标签 java json gson

我有一个来自服务器的字符串输出,我正在尝试从该字符串中提取一些值。

这是服务器的输出:

jsonString =

{
  "MEANING":"reduce",
  "DISPLAY":"",
  "TYPE_CD":1,
  "SELECTED_IND":1,
  "CNT":1,
  "SOURCES":[
              { "a":1 }
            ]
}

代码:

JsonReader reader = new JsonReader(new StringReader(jsonString));
DataObject obj1 = new Gson().fromJson(reader, DataObject.class);

数据对象类:

DataObject
{ 
    private int MEANING;
    private int CNT;
    private String TYPE_CD;
    private String DISPLAY;
    private String MEANING;
    private List<Long> SOURCES;

    public String getSourceTypeMeaning()
     {
       return this.MEANING;
     }

    public String getSourceTypeDisplay() 
     {
       return this.DISPLAY;
     }

    public String getSourceTypeCd() 
     {
       return this.TYPE_CD;
     }

    public int getSourceCount() 
     {
       return this.CNT;
     }

    public List<Long> getSourceList() 
     {
       return this.SOURCES;
     }
}

但出现此错误

Expected a string but was BEGIN_OBJECT at line 1 column 132

我无法找到我的代码的问题。

最佳答案

其他答案指出问题出在 SOURCES 字段中,这是事实,但他们给出的解决方案不正确......

你不能只使用Map来解析SOURCES字段,因为这个字段确实是一个数组!你有:

"SOURCES": [ ... ]

既然你有方括号[],你就有了一个数组!确实有一个 Map,但它包含在数组中......

因此,正确解析该字段需要的是:

private List<Map<String, int>> SOURCES;
<小时/>

请注意,我们使用 Map 来允许 SOURCES 的内容具有多个未知值,以便此代码可以解析不仅您的 JSON,而且类似于:

"SOURCES":[
              { "a":1, "b":2 },
              { "c":3 },
              { "x":99, "y":98, "z":97 }
          ]

关于java - 将字符串转换为 gson 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17668614/

相关文章:

java - 当JsonArray嵌套到另一个JsonArray时如何使用Retrofit2进行反序列化

java - gson 对象与 json 之间的转换导致异常

javaboncp连接池处理问题

java - 如何让图片在 Canvas 上充当游戏角色?

java - 文件的最后修改

java - 当您有名为 "Users"的表时出现 H2 JDBC 错误

python - 如何创建多级json文件,然后从python读取特定值?

android - Gson:由于 ExclusionStrategy 错误无法编译项目

java - 如何使用 Jackson 将 JSON 字符串解析为 java 对象?

python - Pandas 数据帧到 JSON 格式的操作