报错 expect {, actual string, pos 0
错误信息
com.alibaba.fastjson.JSONException: syntax error, expect {, actual string, pos 0, fastjson-version 1.2.73
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:515)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseRest(JavaBeanDeserializer.java:1613)
at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_1_ConfigItemInfoBo.deserialze(Unknown Source)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:296)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:694)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:395)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:299)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:572)
at com.alibaba.fastjson.util.TypeUtils.cast(TypeUtils.java:1216)
at com.alibaba.fastjson.util.TypeUtils.castToJavaBean(TypeUtils.java:1038)
at com.alibaba.fastjson.JSONObject.getObject(JSONObject.java:163)
at com.pandora.service.impl.ApolloAppManageServiceImpl.getConfigItemInfoBos(ApolloAppManageServiceImpl.java:212)
at com.pandora.service.impl.ApolloAppManageServiceImpl.lambda$oneKey$7(ApolloAppManageServiceImpl.java:527)
at java.base/java.lang.Thread.run(Unknown Source)
异常代码
...JSONObject jsonObject = k8sConfigUtils.deployGoMinio(companyCode, storage);jsonObject.put("msg", jsonObject.getString("message"));jsonObject.put("type", "minio");jsonObject.put("success", "");jsonObject.put("company", companyCode);JSONArray jsonArray = new JSONArray();jsonArray.add(jsonObject);result.addAll(getConfigItemInfoBos(companyCode,jsonArray));...private List<ConfigItemInfoBo> getConfigItemInfoBos(String companyCode, JSONArray configArray) {List<ConfigItemInfoBo> result = new ArrayList<>();// 刷一次配置,支持重复刷,只新增,不覆盖copyConfigFromDefaultCluster(companyCode);Map<String, String> configItemMap = new ConcurrentHashMap<>();// 解析配置for (int i = 0; i < configArray.size(); i++) {// 示例:// {"nginx": {"ip": "192.168.0.72", "port": "32348", "company": "company", "success": true, "msg": "success"}}JSONObject jsonObject = configArray.getJSONObject(i);// 只有一个key,直接获取String typeName = jsonObject.keySet().iterator().next();ConfigItemInfoBo configItemInfoBo = jsonObject.getObject(typeName, ConfigItemInfoBo.class);configItemInfoBo.setTypeName(typeName);// 配置转换ServiceTypeEnum.handleConfig(true, configItemInfoBo, configItemMap);result.add(configItemInfoBo);if (!Boolean.valueOf(configItemInfoBo.getSuccess())) {throw new ServiceException("部署结束," + configItemInfoBo.getMsg());}}...}...
大致过程就是,通过 http 请求拿取json数据,解析为 jsonObject,然后再往 jsonObject 添加字段,接着new JsonArray,并将 jsonObject 放入到 JsonArray 中。最后将 JsonArray 作为参数,传入到对应的方法中解析。尴尬的事情发生了,报错了。
解决
查了半天,原来自己的 json 构建错误,该打
