一、JSONObject和JSONArray的数据表示形式
JSONObject的数据是用 { } 来表示的,
例如: { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业", "content" : null }
而JSONArray,顾名思义是由JSONObject构成的数组,用 [ { } , { } , ...... , { } ] 来表示
例如: [ { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业" } , { "content" : null, "beginTime" : 1398873600000 "endTime" } ] ;
表示了包含2个JSONObject的JSONArray。
可以看到一个很明显的区别,一个用的是 { } ,一个最外面用的是 [ ] ;
二.JSONObject、JSONArray、Map、String之间转换
1.String转JSONObject
String jsonMessage = "{\"语文\":\"88\",\"数学\":\"78\",\"计算机\":\"99\"}";
JSONObject myJson = JSONObject.fromObject(jsonMessage);
2.String转JSONArray
String jsonMessage = "[{'num':'成绩', '外语':88, '历史':65, '地理':99, 'object':{'aaa':'1111','bbb':'2222','cccc':'3333'}}," +
"{'num':'兴趣', '外语':28, '历史':45, '地理':19, 'object':{'aaa':'11a11','bbb':'2222','cccc':'3333'}}," +
"{'num':'爱好', '外语':48, '历史':62, '地理':39, 'object':{'aaa':'11c11','bbb':'2222','cccc':'3333'}}]";
JSONArray myJsonArray = JSONArray.fromObject(jsonMessage);
System.out.println(myJsonArray);
3.String转Map
(1)
String jsonMessage = "{\"语文\":\"88\",\"数学\":\"78\",\"计算机\":\"99\"}";
JSONObject myJson = JSONObject.fromObject(jsonMessage);
Map m = myJson;
(2) (需要引入jackjson的core、databind、annotations三个jar包 )
String json = "{\"PayPal key2\":\"PayPal value2\",\"PayPal key1\":\"PayPal value1\",\"PayPal key3\":\"PayPalvalue3\"}";
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> m = mapper.readValue(json, Map.class);
(3)(特殊格式的String)
String a ="{se=2016, format=xml, at=en co=3}";
a = a.substring(1, a.length()-1);
Map docType = new HashMap();
Java.util.StringTokenizer items;
for(StringTokenizer entrys = new StringTokenizer(a, ", ");entrys.hasMoreTokens();
docType.put(items.nextToken(), items.hasMoreTokens() ? ((Object) (items.nextToken())) : null)){
items = new StringTokenizer(entrys.nextToken(), "=");
}
4.JSONObject、JSONArray,Map转String
JSONObject——String:
System.out.println(myJsonObject);//可直接输出JSONObject的内容
myJsonObject.toString();
JSONArray——String:
System.out.println(myJsonArray);//可直接输出myJsonArray的内容
myJsonArray.toString();
Map——String:
System.out.println(map);//可直接输出map的内容
map.toString();
5.JSONObject转JSONArray
6.JSONObject转Map
JSONObject myJson = JSONObject.fromObject(jsonString);
Map m = myJson;
7.JSONArray转JSONObject
for(int i=0 ; i < myJsonArray.length() ;i++)
{
//获取每一个JsonObject对象
JSONObject myjObject = myJsonArray.getJSONObject(i);
}
8.JSONArray转Map
9.Map转JSONObject
JSONObject json = JSONObject.fromObject( map );
10.Map转JSONArray
JSONArray.fromObject(map);
11.List转JSONArray
JSONArray jsonArray2 = JSONArray.fromObject( list );
12.JSONArray转List
List<Map<String,Object>> mapListJson = (List)jsonArray;
13.String转数组
String string = "a,b,c";
String [] stringArr= string.split(","); //注意分隔符是需要转译滴...
如果是"abc"这种字符串,就直接
String string = "abc" ;
char [] stringArr = string.toCharArray(); //注意返回值是char数组
如果要返回byte数组就直接使用getBytes方法就ok了~~
String string = "abc" ;
byte [] stringArr = string.getBytes();
数组转String
char[] data={a,b,c};
String s=new String(data);
三.取值
- import net.sf.json.JSONArray;
- import net.sf.json.JSONObject;
- public class JsonTest {
- public static void main(String[] args) {
- String joStr = "{name:\"张三\",age:\"20\"}";
- //将json字符串转化为JSONObject
- JSONObject jsonObject = JSONObject.fromObject(joStr);
- //通过getString("")分别取出里面的信息
- String name = jsonObject.getString("name");
- String age = jsonObject.getString("age");
- //输出 张三 20
- System.out.println(name+" "+age);
- String jaStr = "[{user:{name:\"张三\",age:\"20\"}},{score:{yuwen:\"80\",shuxue:\"90\"}}]";
- //将jsonArray字符串转化为JSONArray
- JSONArray jsonArray = JSONArray.fromObject(jaStr);
- //取出数组第一个元素
- JSONObject jUser = jsonArray.getJSONObject(0).getJSONObject("user");
- //取出第一个元素的信息,并且转化为JSONObject
- String name2 = jUser.getString("name");
- String age2 = jUser.getString("age");
- //输出 张三 20
- System.out.println(name2+" "+age2);
- //取出数组第二个元素,并且转化为JSONObject
- JSONObject jScore = jsonArray.getJSONObject(1).getJSONObject("score");
- //取出第二个元素的信息
- String yuwen = jScore.getString("yuwen");
- String shuxue = jScore.getString("shuxue");
- //输出 80 90
- System.out.println(yuwen+" "+shuxue);
- }
- }
遍历JSONArray
- // 一个未转化的字符串
- String str = "[{name:'a',value:'aa'},{name:'b',value:'bb'},{name:'c',value:'cc'},{name:'d',value:'dd'}]" ;
- // 首先把字符串转成 JSONArray 对象
- JSONArray json = JSONArray.fromObject(str );
- if(json.size()>0){
- for(int i=0;i<json.size();i++){
- // 遍历 jsonarray 数组,把每一个对象转成 json 对象
- JSONObject job = json.getJSONObject(i);
- // 得到 每个对象中的属性值
- System.out.println(job.get("name")+"=") ;
- }
- }
遍历JSONObject
- SONObject jsonObject = new JSONObject(s);
- //然后用Iterator迭代器遍历取值,建议用反射机制解析到封装好的对象中
- JSONObject jsonObject = new JSONObject(jsonString);
- Iterator iterator = jsonObject.keys();
- while(iterator.hasNext()){
- key = (String) iterator.next();
- value = jsonObject.getString(key);
- }