雪夜丶夏沫 2022-05-19 19:27 采纳率: 40%
浏览 349
已结题

String 字符串转实体类问题,尝试多次都不行

问题遇到的现象和发生背景

从远端获取JSON数据时,发现转换不了

问题相关代码,请勿粘贴截图

这是返回的body示例

[
"{"Id": "LM1", "Type": 0, "Name": "LocationMark0", "Posture": [-0.589, -0.696, 0], "Property": [{"key": "spin", "type": "bool", "value": "ZmFsc2U=", "boolValue": false}]}",
"{"Id": "LM2", "Type": 0, "Name": "LocationMark1", "Posture": [5.836, -0.321, 0], "Property": [{"key": "spin", "type": "bool", "value": "ZmFsc2U=", "boolValue": false}]}"
]

@Test
void getLandMark() {
//result是用UTF8转换的结果 result就是上面的数组
String result = HttpClientUtils.doGet(apiProperties.getMapInfourl(), apiProperties.getQueryLandmarks(), null);

    List<LandMark> landMarks;
    if (StringUtils.isEmpty(result)) {
        //去除转义符未错,实体类转换错了(但是我惊奇的发现,去除转义符前后没变)
        landMarks = JSONObject.parseArray(String.valueOf(JSON.parse(result)), LandMark.class);
        System.out.println(landMarks);
    }
}

我的实体类是这样子的
@Data
public class LandMark implements Serializable {

private static final long serialVersionUID = 1L;

private String id;

private String name;

private List<Double> posture;

private Integer type;

private  List<Property> property;

}

@Data
public class Property implements Serializable {

private static final long serialVersionUID = 1L;

private String key;

private String value;

private String type;

private boolean boolValue;

}

运行结果及报错内容

com.alibaba.fastjson.JSONException: syntax error, expect {, actual [, pos 0

at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:233)
at com.alibaba.fastjson.parser.deserializer.ASMJavaBeanDeserializer.parseRest(ASMJavaBeanDeserializer.java:101)
at Fastjson_ASM_LandMark_1.deserialze(Unknown Source)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:556)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:251)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:227)
我的解答思路和尝试过的方法
我想要达到的结果

按照实体类获取 如果不能按照实体类获取,那就想个办法获取,我自己转实体类也行

  • 写回答

10条回答 默认 最新

  • 吕布辕门 后端领域新星创作者 2022-05-19 19:33
    关注
    获得6.80元问题酬金

    根据报错可以知道,你的json格式有问题。

    把返回字符串改成如下,才能调用JSONObject.parseArray

    
    [
    {"Id": "LM1", "Type": 0, "Name": "LocationMark0", "Posture": [-0.589, -0.696, 0], "Property": [{"key": "spin", "type": "bool", "value": "ZmFsc2U=", "boolValue": false}]},
    {"Id": "LM2", "Type": 0, "Name": "LocationMark1", "Posture": [5.836, -0.321, 0], "Property": [{"key": "spin", "type": "bool", "value": "ZmFsc2U=", "boolValue": false}]}"
    ]
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月27日
  • 创建了问题 5月19日

悬赏问题

  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥66 如何制作支付宝扫码跳转到发红包界面
  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题