试图将我的Json字符串数据Map到一个对象,我正在使用Gson来解析数据,数据被解析,但当我在值中给予空格时,它给了我异常

bvn4nwqk  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(261)

错误-**com.google.gson.stream.格式错误的JSON异常:第1行第26列路径$.[0].STATE”**处的对象未终止
这是我的POST请求。其中Data是对象,id & resource是字符串
第一个
Now if i give Space between TORONTO CITY,它会给予我一个例外
com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 26 path $.[0].STATE"
但当我发送的请求中没有空格作为键和值时,比如-

"RECORD": [
            {
                "STATE": "TORONTOCITY"
            },
            {
                "WORK": "SERVICE"
            }
        ]
    }

它可以工作但不适用于Space
代码-

public ResponseEntity<MasterBlockChainResponse> dummy(@RequestBody(required=false) Masterpayload valueobject) {
        Gson gson = new Gson();
        MasterBlockChainResponse response = new MasterBlockChainResponse();
        Object json = valueobject.getData();

        Map<String, Object> map = gson.fromJson(json.toString(), Map.class);
        response.setId(valueobject.getId());
        response.setResourceName(valueobject.getResourceName());
        response.setData(map);

        return ResponseEntity.status(HttpStatus.OK).body(response);

    }
wf82jlnq

wf82jlnq1#

嗨这是因为行:

Map<String, Object> map = gson.fromJson(json.toString(), Map.class);

当您使用toString方法时,它不会将对象转换为合法的JSON对象,请尝试使用ObjectMapper。

Map<String, Object> map = gson.fromJson(objectMapper.writeValueAsString(json), Map.class);

快速对比差异:

  • ToString生成:

{记录=[{州=多伦多市},{工作=服务}]}

  • 将值写入为字符串生成:

{“记录”:[{“州”:“多伦多市”},{“工作”:“服务”}]}
程式码片段:

Gson gson = new Gson();
    Object json = valueobject.getData(); //{RECORD=[{STATE=TORONTO CITY}, {WORK=SERVICE}]}
    String jsonString = gson.toJson(json); //{"RECORD":[{"STATE":"TORONTO CITY"},{"WORK":"SERVICE"}]}
    Map<String, Object> map = gson.fromJson(jsonString, Map.class); //{RECORD=[{STATE=TORONTO CITY}, {WORK=SERVICE}]}
    ArrayList x = (ArrayList) map.get("RECORD");
    x.get(0); //{STATE=TORONTO CITY}
    x.get(1); //{WORK=SERVICE}
rdlzhqv9

rdlzhqv92#

您的对象数据是一个简单对象,因为您需要如下所示的数据进行解析:

Data{
List<String> RECORD;
}

所以你的主要类:

Class{
    String id;
    String resourceName;
    Data data;
}

而不是Map键-值。这样就不会有任何问题

相关问题