setLenient(true) 使用 Gson 库解析时出错

rei*_*lee 5 java json gson

我的示例 Json 数组:

{ 
 "tag":{
    "id": "1112",
    "AP": "77",
    "data":[
       {
         "name": "position",
         "type": "integer",
         "unit": "meter",
         "value": 5
       },
       {
         "type": "RSSI",
         "unit": "dBm",
         "value": -76
       }
     ]
   }
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

public void parse(){
    String json = new String(inPacket.getData());
    JsonElement jelement = new JsonParser().parse(json);
    JsonObject  jobject = jelement.getAsJsonObject();
}
Run Code Online (Sandbox Code Playgroud)

和异常代码:

Exception in thread "Thread-0" 
    com.google.gson.JsonSyntaxException: 
    com.google.gson.stream.MalformedJsonException: 
    Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 154
      at com.google.gson.JsonParser.parse(JsonParser.java:65)
      at com.google.gson.JsonParser.parse(JsonParser.java:45)
Run Code Online (Sandbox Code Playgroud)

我不知道 JSON 数组。但是 Google Gson 库可以帮助我。我该如何解决这个问题?你能帮我吗?

hel*_*tto 5

如果 trim() 不起作用,您可以使用 setLenient:

JsonReader reader = new JsonReader(new StringReader(myFooString));
reader.setLenient(true);
JsonParser.parseReader(reader)
Run Code Online (Sandbox Code Playgroud)

  • 为了避免“new JsonParser().parse(reader)”上出现 2 个“已弃用”警告,您可以使用静态方法:“JsonParser.parseReader(reader)” (2认同)

rei*_*lee 1

FIX :: 使用 String.trim() 方法。并且此代码正在运行。

public void parse(){
    String json = new String(inPacket.getData());
    JsonElement jelement = new JsonParser().parse(json.trim());
    JsonObject  jobject = jelement.getAsJsonObject();
}
Run Code Online (Sandbox Code Playgroud)