Java Jackson-映射的递归解析<;字符串,对象>;
我试图简化我的代码:我想存储键和值(所有字符串) 实际上,我正在使用Java Jackson-映射的递归解析<;字符串,对象>;,java,json,parsing,jackson,Java,Json,Parsing,Jackson,我试图简化我的代码:我想存储键和值(所有字符串) 实际上,我正在使用地图来存储它。帽道对象可以是值(字符串)或新节点(映射) 如何简化此代码? 递归函数会很好 try { JsonParser jsonParser = new JsonFactory().createJsonParser(content); jsonParser.nextToken(); while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
地图来存储它。帽道对象
可以是值(字符串
)或新节点(映射
)
如何简化此代码?
递归函数会很好
try {
JsonParser jsonParser = new JsonFactory().createJsonParser(content);
jsonParser.nextToken();
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
jsonParser.nextToken();
if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
String key = jsonParser.getCurrentName();
jsonParser.nextToken();
if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
mData.put(key, new HashMap<String, Object>());
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
String subkey = jsonParser.getCurrentName();
jsonParser.nextToken();
if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
Map<String, Object> subdata = (Map<String, Object>) mData.get(key);
subdata.put(subkey, new HashMap<String, Object>());
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
String subsubkey = jsonParser.getCurrentName();
jsonParser.nextToken();
Map<String, Object> subsubdata = (Map<String, Object>) subdata.get(subkey);
LogHelper.d("data[" + key + "][" + subkey + "][" + subsubkey + "]=" + jsonParser.getText());
subsubdata.put(subsubkey, jsonParser.getText());
}
}
else {
LogHelper.d("data[" + key + "]=" + jsonParser.getText());
mData.put(key, jsonParser.getText());
}
}
}
else {
LogHelper.d("data[" + key + "]=" + jsonParser.getText());
mData.put(key, jsonParser.getText());
}
}
}
else {
LogHelper.d("status=" + jsonParser.getText());
mStatus = jsonParser.getText();
}
}
}
catch (IllegalArgumentException e) {
error("0", "IllegalArgumentException: " + e.getMessage());
}
catch (JsonParseException e) {
error("0", "IOException: " + e.getMessage());
}
catch (IOException e) {
error("0", "IOException: " + e.getMessage());
}
试试看{
JsonParser JsonParser=新建JsonFactory().createJsonParser(内容);
jsonParser.nextToken();
while(jsonParser.nextToken()!=JsonToken.END\u对象){
jsonParser.nextToken();
if(jsonParser.getCurrentToken()==JsonToken.START\u对象){
while(jsonParser.nextToken()!=JsonToken.END\u对象){
String key=jsonParser.getCurrentName();
jsonParser.nextToken();
if(jsonParser.getCurrentToken()==JsonToken.START\u对象){
put(key,newhashmap());
while(jsonParser.nextToken()!=JsonToken.END\u对象){
String subkey=jsonParser.getCurrentName();
jsonParser.nextToken();
if(jsonParser.getCurrentToken()==JsonToken.START\u对象){
Map subdata=(Map)mData.get(key);
put(subkey,newhashmap());
while(jsonParser.nextToken()!=JsonToken.END\u对象){
String subkey=jsonParser.getCurrentName();
jsonParser.nextToken();
Map subsubdata=(Map)subdata.get(subkey);
LogHelper.d(“数据[”+key+“][”+subkey+“][”+subsubkey+“]=”+jsonParser.getText());
put(subsubkey,jsonParser.getText());
}
}
否则{
LogHelper.d(“数据[”+key+“]=”+jsonParser.getText());
put(key,jsonParser.getText());
}
}
}
否则{
LogHelper.d(“数据[”+key+“]=”+jsonParser.getText());
put(key,jsonParser.getText());
}
}
}
否则{
LogHelper.d(“status=“+jsonParser.getText());
mStatus=jsonParser.getText();
}
}
}
捕获(IllegalArgumentException e){
错误(“0”,“IllegalArgumentException:+e.getMessage());
}
捕获(JSONParsee异常){
错误(“0”,“IOException:+e.getMessage());
}
捕获(IOE异常){
错误(“0”,“IOException:+e.getMessage());
}
假设您的最终目标只是将JSON反序列化为映射,那么使用Jackson有一种简单得多的方法来实现这一点。使用对象映射器
:
final String json = "{}";
final ObjectMapper mapper = new ObjectMapper();
final MapType type = mapper.getTypeFactory().constructMapType(
Map.class, String.class, Object.class);
final Map<String, Object> data = mapper.readValue(json, type);
final String json=“{}”;
最终ObjectMapper映射器=新ObjectMapper();
final MapType type=mapper.getTypeFactory().constructMapType(
Map.class、String.class、Object.class);
最终映射数据=mapper.readValue(json,类型);
您将需要错误处理等,但这是一个很好的起点。事实上,使用jackson-core
和jackson-mapper
库,您的代码只需3行即可工作!谢谢