文章目录
一、Json 概述
简介
JSON(JavaScript Object Notation, JS 对象标记) ,简写为JSON。是一种轻量级的数据交换格式,目前使用特别广泛。有着让人一目了然的数据格式,让我们在编写和阅读更加容易,也更易于机器解析。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为了理想的数据交换语言。
-
JSON由两种结构组成:
- 键值对的无序集合——对象(或者叫记录、结构、字典、哈希表、有键列表或关联数组等)
- 值的有序列表——数组
-
json 的格式:
- 对象是一个无序键值对的集合,以"{“开始,同时以”}“结束,键值对之间以”:“相隔,不同的键值对之间以”,"相隔,举例
{
"json1" : 1,
"json2" : "string",
"json3" :
{
"json3-1" : 1,
"json3-2" : "string"
}
}
二、java 处理 json 数据
1、json中的数组和对象
- 1.数组(JsonArray)
- 数组用一对[],表示存放的是数组数据。 如:[“1”,“2”,“3”],表示这是一个JSONArray数组。
- 2.对象(JsonObject)
- 对象用一对{},来表示其中JSON通用的”键-值“对。如:{“sex1”:“female”,“name0”:“zhangsan”},表示的是一个JSON对象,里面有两组数据(键值对),sex1=female,name0=zhangsan。这里键对应的数据值,也可以是复杂的JSON对象或者数组。
- 对象用一对{},来表示其中JSON通用的”键-值“对。如:{“sex1”:“female”,“name0”:“zhangsan”},表示的是一个JSON对象,里面有两组数据(键值对),sex1=female,name0=zhangsan。这里键对应的数据值,也可以是复杂的JSON对象或者数组。
2、JSONArray和JSONObject的常用方法
-
JSONObject 常用方法
1 解析字符串 JSONObject obj = JSONArray.parseObject(str); 2 存值取值 (1) 存值 obj.put("key", key); obj.put("value", value); (2) 取值 value = obj.get(key); 3 与String字符串转换 toJSONString() /toString():将JSONObject对象转换为json的字符串 4 格式: 本质是对象, 用 {} 表示 格式: {key:value}
-
JSONArray 常用方法
1 解析字符串 JSONArray jsonarr = JSONArray.parseArray(str); 2 存值取值 (1) 存值 jsonarr.add(obj); (2) 取值 for(int i =0; i <= jsonarr.size(); i++){ jsonarr[i].get(key); } 3 格式: 本质是数组, 必须是数组格式, 用 [ ] 包裹数据 格式: [{key:value},{key:value}... ] ["str1","str2","str3",...]
3、基本的JSONArray和JSONObject操作
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class ObjectAndArray1 {
public static void main(String args[])
{
JSONObject jsonObj = new JSONObject();
jsonObj.put("name0", "zhangsan");
jsonObj.put("sex1", "female");
System.out.println(jsonObj); //输出为:{"sex1":"female","name0":"zhangsan"}
JSONArray jsonArray = new JSONArray();
jsonArray.add("11");
jsonArray.add("22");
jsonArray.add("33");
System.out.println(jsonArray); //输出为:["11","22","33"]
}
}
4、由java自带的数据结构转换为JSON文本
import java.util.HashMap;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class ObjectAndArray2{
public static void main(String args[])
{
//可以由数组,列表等生成JSONArray
String list[]={"11","22"};
JSONArray jsonarray = JSONArray.fromObject(list);
jsonarray.add("33");
System.out.println(jsonarray); //输出为:["11","22","33"]
//可以由Map生成JSONObject
Map<String,Object> map=new HashMap<String,Object>();
map.put("NO1", "第一个");
map.put("NO2", "第二个");
map.put("NO3", jsonarray);
JSONObject jsonObj = JSONObject.fromObject(map);
System.out.println(jsonObj); //输出为:{"NO3":["11","22","33"],"NO2":"第二个","NO1":"第一个"}
}
}
5、读取JSON文件
- 注意:
- JSONArray 必须用下标读取内部数据。
- JSONObject 必须用"键"读取对应的"值"。
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class ObjectAndArray {
public static void main(String args[])
{
JSONArray jsonarray;
JSONObject jsonObj;
//读取JSONArray,用下标索引获取
String array="[\"11\",\"22\",\"33\"]";
jsonarray = JSONArray.fromObject(array);
System.out.println(jsonarray.getString(1)); //输出为:22
//读取JSONObject
String object="{\"NO1\":[\"44\",\"55\",\"66\"],\"NO2\":{\"NO1\":\"第一个\"}}";
jsonObj = JSONObject.fromObject(object);
System.out.println(jsonObj.get("NO1")); //输出为:["44","55","66"]
jsonarray = (JSONArray)(jsonObj.get("NO1"));
System.out.println(jsonarray.getString(1)); //输出为:55
//用"键"获取值
jsonObj=(JSONObject)jsonObj.get("NO2");
System.out.println(jsonObj); //输出为:{"NO1":"第一个"}
}
}