繁体   English   中英

试图将我的 Json String 数据映射到一个对象。 我正在使用 Gson 来解析数据。 数据被解析但是当我给空间值时它给了我异常

[英]trying to Map my Json String data to an object. I'm using Gson to parse the data. Data get parsed but when i give Space in Value it gives me Exception

异常 - com.google.gson.stream.MalformedJsonException:第 1 行第 26 列路径 $.[0].STATE 的未终止对象"

这是我的帖子请求。 其中数据是对象,id 和资源是字符串

private String id;
private String resourceName;
private Object data;
{
    "id": "150",
    "resourceName": "Fabrik-Resource",
    "data": {
        "RECORD": [
            {
                "STATE": "TORONTO CITY"
            },
            {
                "WORK": "SERVICE"
            }
        ]
    }
}

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);
        
    }

您的对象数据是一个简单的对象,因为您需要这样的数据进行解析:

Data{
List<String> RECORD;
}

所以你的主要课程:

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

而不是地图键值。 这样你就不应该有任何问题

嗨,这是因为这条线:

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

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

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

快速比较差异:

  • ToString 产生:

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

  • writeValueAsString 产生:

{"RECORD":[{"STATE":"TORONTO CITY"},{"WORK":"SERVICE"}]}

代码片段:

    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}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM