我寫了一個JSON轉換工具,可以將復雜JSON轉換為MAP,
但是我發現我無法將其還原為JSON了,求大佬幫下忙想想應該怎么做.
轉換前:
{
"msg":"OK",
"code":0,
"data":{
"product":[
{
"name":"普通產品",
"id":1
},
{
"name":"會員產品",
"id":2
}
],
"sort":[
2,
1
]
}
}
轉換后:
{
"msg":"OK",
"data.product[0].id":1,
"data.product[1].id":2,
"data.product[0].name":"普通產品",
"code":0,
"data.product[1].name":"會員產品",
"data.sort[0]":2,
"data.sort[1]":1
}
源代碼如下:
package utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
/**
* @author adinlead
*/
public class JsonMapper {
public static Map<String, Object> spreadJsonObject(JSONObject obj) {
Map<String, Object> data = new HashMap<>(obj.size());
spreadMap(null, data, obj);
return data;
}
private static void spreadMap(String baseKey, Map<String, Object> target, Map map) {
if (baseKey == null) {
baseKey = "";
} else {
baseKey += ".";
}
for (Object key : map.keySet()) {
Object val = map.get(key);
if (val instanceof Map) {
spreadMap(baseKey + key, target, (Map) val);
} else if (val instanceof List) {
spreadList(baseKey + key, target, (List) val);
} else if (val instanceof Object[]) {
spreadList(baseKey + key, target, Arrays.asList((Object[]) val));
} else {
target.put(baseKey + key, val);
}
}
}
private static void spreadList(String baseKey, Map<String, Object> target, List array) {
if (baseKey == null) {
baseKey = "";
}
for (int i = 0; i < array.size(); i++) {
Object val = array.get(i);
if (val instanceof Map) {
spreadMap(baseKey + "[" + i + "]", target, (Map) val);
} else if (val instanceof List) {
spreadList(baseKey + "[" + i + "]", target, (List) val);
} else if (val instanceof Object[]) {
spreadList(baseKey + "[" + i + "]", target, Arrays.asList((Object[]) val));
} else {
target.put(baseKey + "[" + i + "]", val);
}
}
}
public static void main(String[] args) {
String test = "{\"code\":0,\"msg\":\"OK\",\"data\":{\"product\":[{\"id\":1,\"name\":\"普通產品\"},{\"id\":2,\"name\":\"會員產品\"}],\"sort\":[2,1]}}";
JSONObject testObject = JSONObject.parseObject(test);
Map<String, Object> result = spreadJsonObject(testObject);
System.out.println(JSON.toJSONString(testObject, true));
System.out.println(JSON.toJSONString(result, true));
}
}
uj5u.com熱心網友回復:
我覺得沒必要這么寫吧public static HashMap<String, String> JsonObjectToHashMap(JSONObject jsonObj){
HashMap<String, String> data = new HashMap<String, String>();
Iterator it = jsonObj.keys();
while(it.hasNext()){
String key = String.valueOf(it.next().toString());
String value = (String)jsonObj.get(key).toString();
data.put(key, value);
}
System.out.println(data);
return data;
}
uj5u.com熱心網友回復:
這不就行了嘛。一頓操作猛如虎
public static void main(String[] args) {
String test = "{\"code\":0,\"msg\":\"OK\",\"data\":{\"product\":[{\"id\":1,\"name\":\"普通產品\"},{\"id\":2,\"name\":\"會員產品\"}],\"sort\":[2,1]}}";
JSONObject testObject = JSONObject.parseObject(test);
Map m = JSONObject.parseObject(testObject.toJSONString(), Map.class);
String str = JSON.toJSONString(m);
System.out.println(str);
}
uj5u.com熱心網友回復:
太復雜的結構,比如自己定義的bean,可以將class作為引數傳進去,不用這么費勁寫一堆自己決議。代碼要簡潔優雅轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/90457.html
標籤:Java EE
上一篇:【求助】請問現在上海4-5年經驗的JAVA開發 薪資是什么水平?
下一篇:目前有沒有后端組織資料用框架?
