项目中经常会遇到类似的需要,比如网络请求需要传送json序列化字符串,那么问题就来了,json串到底怎么转换呢?下面就iOS和Android给出不同的转换实现方式。
需要转换成的json text结构体如下:
{
"Key1": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
},
"Key2": {
"key1": "value1",
"key2": [x, x, x, x, x],
"key3":["Ix","x","x", "x", "x"]
}
}
首先分析上面的结构,最外层的括号说明里面是json对象,Key1 和 Key2 可以看作两个主键,每一个主键里面又包含了若干个键值对,键值对的值中又包含有数组,[]
分析完了结构,怎么组织数据呢?
compile 'com.google.code.gson:gson:2.8.1'
public class JSONModel { //data and header are json key, must be same as json key definition HashMap, Object> Key2; HashMap , String> Key1; public HashMap , Object> getKey2() { return Key2; } public void setKey2(HashMap , Object> Key2) { this.Key2 = Key2; } public HashMap , String> getKey1() { return Key1; } public void setKey1(HashMap , String> Key1) { this.Key1 = Key1; } }
而后就按照普通的操作,将key中对应的数据进行本地封装
String parseResultString = ""; ArrayListarray1; ArrayList array2; String valueStr; //gson Gson gson = new Gson(); JSONModel model = new JSONModel(); HashMap , Object> key2HashMap = new HashMap<>(); key2HashMap.put("key1",valueStr); key2HashMap.put("key2",array1); key2HashMap.put("key3",array2); HashMap<String, String> key1HashMap=new HashMap<>(); key1HashMap.put("key1",value1); key1HashMap.put("key2",value2); key1HashMap.put("key2",value3); model.setKey1(key1HashMap); model.setKey2(key2HashMap); parseResultString = gson.toJson(model);
最终转换后的json string打印出来大体格式如下:
{"Key1":{"key1":"value1","key2":"value2","key3":"value3"},"Key2":{"key2":[x,x,x,x,x],"key1":"value1","key3":["x","x","x","x","x"]}}
其实也可以不用创建实体类,直接封装本地数据,用同样的方式调用一样可以。使用文件通常可以比如有已知的json格式的文本文件,直接映射成json实体类来实现就可以了。
parseResultString = gson.toJson(封装数据);
上面说了借助Gson来实现的方式,还有一种更简便的方式,使用系统api
本地封装过程同上,不需要再定义实体类,封装完成后,直接使用 JSONObject jsonObject = new JSONObject(data)获取json对象,最终使用toString的方式来获取转换结果即可。
HashMap注意,这种方式因为不需要创建实体类,因此需要多定义一个包含最为层结构的hashmap, Object> requestParamaters = new HashMap<>(); String parseResultString = ""; ArrayList array1; ArrayList array2; String valueStr; HashMap , Object> key2HashMap = new HashMap<>(); key2HashMap.put("key1",valueStr); key2HashMap.put("key2",array1); key2HashMap.put("key3",array2); HashMap<String, String> key1HashMap=new HashMap<>(); key1HashMap.put("key1",value1); key1HashMap.put("key2",value2); key1HashMap.put("key2",value3); requestParamaters.put(Key1, key1HashMap); requestParameters.put(Key2, key2HashMap); JSONObject jsonObject = new JSONObject(requestParamaters); fianlString = jsonObject.toString();
HashMap, Object> key2HashMap = new HashMap<>();
iOS 的转换成json string就基本上使用系统api即可
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:0 error:nil];
NSString *.finalJsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
这一篇文章基本结束了,常遇到的问题就此可以得到解决。