读取JSON时出现400错误

时间:2016-12-13 11:38:07

标签: java json jackson

我发送以下JSON:

{
  "sqId": "10009",
  "pCode": [
    {
      "key": [
        [
          1,
          0,
          1
        ]
      ]
    }
  ],
  "hdId": "87",
  "sType": [
    {
      "key": [
        {
          "id": "id_1",
          "q": "1",
          "pCode": "pCode_1",
          "Type": "T_1",
          "Level": "f"
        }
      ]
    }
  ]
}

使用以下POJO映射:

public class Pinfo {

   protected String sqId;
   protected String hdId;
   protected Map<String, Integer> pCode;
   protected Map<String, List<sType>> sType;

   public Map<String, List<sType>> getsType() {
      return sType;
   }

   public void setsType(Map<String, List<sType>> sType) {
      this.sType = sType;
   }

   public String getsqId() {
      return sqId;
   }

   public void setsqId(String sqId) {
      this.sqId = sqId;
   }

   public Map<String, Integer> getpCode() {
      return pCode;
   }

   public void setpCode(Map<String, Integer> pCode) {
      this.pCode = pCode;
   }

   public String gethdId() {
      return hdId;
   }

   public void sethdId(String hdId) {
      this.hdId = hdId;
   }

}

现在使用以下代码阅读JSON:

Map<String, Integer> pMap = (Map<String, Integer>) PinfoObj.getpCode(); //Getting Error 
logger.debug("### pMap ###"+pMap.values());

但我收到错误:

  

&#34;无法读取文档:无法反序列化实例   java.util.LinkedHashMap中的START_ARRAY标记\ n在[来源:   java.io.PushbackInputStream@5ed7c090; line:2,column:40](通过   参考链:com.ve.pg.dto.Pinfo [\&#34; pCode \&#34;]);嵌套异常是   com.fasterxml.jackson.databind.JsonMappingException:不能   从START_ARRAY反序列化java.util.LinkedHashMap的实例   令牌\ n在[来源:java.io.PushbackInputStream@5ed7c090;线:2,   专栏:40](通过参考链:   com.vonage.pg.dto.Pinfo [\&#34; P码\&#34;])&#34;

无法弄清楚我现在缺少什么,任何想法或提示都会很棒。

2 个答案:

答案 0 :(得分:4)

错误:

Could not read document: Can not deserialize instance of
       java.util.LinkedHashMap out of START_ARRAY token

告诉你&#34;我遇到了START_ARRAY令牌([),但是你要我反序列化到地图,所以我希望找到一个START_OBJECT令牌({) &#34;

你的错误是试图反序列化像

这样的东西
[{
  "key": [
    [
      1,
      0,
      1
    ]
  ]
}]

Map<String, Integer>,实际上是List<Map<String, List<List<Integer>>>>。您应该更改JSON的结构,或者将类型更改为反序列化为。

sType应该修正同样的错误。

答案 1 :(得分:1)

类型不匹配,可以这样改变:

int foo(int i)
{
    return i;
}

int foo(int i, int... n)
{
    return i + foo(n...);
}

int main()
{
    return foo(1, 2, 3); // error
}