[alibaba/fastjson]遍历int类型的key,会找不到数据,或异常

2025-10-29 269 views
6

我应用中用到的json = {0:{"id":0,"index":0},1:{"id":0,"index":1}}, 代码如下: 异常代码1:

JSONObject jsonObject = JSONObject.parseObject(json); Set keys = jsonObject.keySet();/ for(Object key : keys){ JSONObject sceneInfoJSON = jsonObject.getJSONObject(key.toString());//取不到数据,与预期不一致 SceneInfo sceneInfo = new SceneInfo(sceneInfoJSON);

    }

异常代码2: JSONObject jsonObject = JSONObject.parseObject(json); Set keys = jsonObject.keySet(); for(String key : keys){ JSONObject sceneInfoJSON = jsonObject.getJSONObject(key);//异常,与预期不一致 SceneInfo sceneInfo = new SceneInfo(sceneInfoJSON);

    }

回答

3

我应用中用到的json = {0:{"id":0,"index":0},1:{"id":0,"index":1}}, 这个是通过JSONObject.toJSONString(Map<Integer,Object>)转过来的

3

如果不严格限制这种转换,是否有个可行的方式给使用者一点提示,这个json转出来是不合法的

1

对于非字符串(没有使用引号括起来)的key,可以使用 SerializerFeature.WriteNonStringKeyAsString 将其转换为字符串key。

String json = "{0:{\"id\":0,\"index\":0},1:{\"id\":0,\"index\":1}}";
JSONObject jsonObject = JSONObject.parseObject( json ); //这个应该是你的原始JSON对象: {0:{"index":0,"id":0},1:{"index":1,"id":0}}
String json2 = JSONObject.toJSONString( jsonObject, SerializerFeature.WriteNonStringKeyAsString );
JSONObject jsonObject2 = JSONObject.parseObject( json2 ); // 转化后的JSON对象:{"0":{"index":0,"id":0},"1":{"index":1,"id":0}}

转化后的JSON jsonObject2 {"0":{"index":0,"id":0},"1":{"index":1,"id":0}}是合法的了。