★有大神言:從結構上看,所有的數(shù)據(jù)(data)最終都可以分解成三種類型:
第一種類型是標量(scalar),也就是一個單獨的字符串(string)或數(shù)字(numbers),比如"北京"這個單獨的詞。
第二種類型是序列(sequence),也就是若干個相關的數(shù)據(jù)按照一定順序并列在一起,又叫做數(shù)組(array)或列表(List),比如"北京,上海"。
第三種類型是映射(mapping),也就是一個名/值對(Name/value),即數(shù)據(jù)有一個名稱,還有一個與之相對應的值,這又稱作散列(hash)或字典(dictionary),比如"首都:北京"。
★JavaScript Object Notation即為JSON,JavaScript對象表示法。
★一種與開發(fā)語言無關的,輕量級的數(shù)據(jù)格式。
★易讀易編寫,易于程序解析與生產(chǎn)。
★{ }表示對象,[ ]表示數(shù)組array
★使用key-value的形式存儲數(shù)據(jù),類似java中的
Map<String,Object>數(shù)據(jù)結構。
★key必須為字符串,value可以是數(shù)字(整數(shù)或浮點數(shù)),字符串(在雙引號中),邏輯值(true 或 false),數(shù)組([ ]包圍),對象({ }包圍),null等。
★一個好用的json解析網(wǎng)址:json.cn
★幾乎每種語言都有支持JSON的api,java同樣支持。JSONObject對應json的對象,JSONArray對應json的array。
import java.util.HashMap;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JsonTest {
//JSON是一種與開發(fā)語言無關的,輕量級的數(shù)據(jù)格式。全稱:JavaScript Object Notation
//易讀易編寫,易于程序解析與生產(chǎn)
//key : value存儲方式,key為字符串,value可為string,number,true,false,null等數(shù)據(jù)結構或數(shù)據(jù)結構
//{}表示對象,[]表示數(shù)組array
//json解析網(wǎng)址:json.cn
public static void main(String...args){
//標準的json里面是沒有注釋的
//一個簡單json例子
String aPersonJson = " "
+ " { "
+ " 'name' : '王小二', "
+ " 'age' : 25, "
+ " 'birthday' : '1990-01-01', "
+ " 'school' : '藍翔', "
+ " 'major' : ['理發(fā)','發(fā)掘機'], "
+ " 'hasGirlfriend' : false, "
+ " 'car' : { "
+ " 'name' : 'BMW', "
+ " 'price' : 500000 "
+ " }, "
+ " 'house' : null "
+ " } ";
JSONObject jo = new JSONObject();
jo = JSONObject.fromObject(aPersonJson);
//添加項
jo.put("idol", "btp");
Object name = jo.get("name");
Object car = jo.get("car");
Object major = jo.get("major");
System.out.println(name);//輸出:王小二
System.out.println(car);//輸出:{"name":"BMW","price":500000}
//major的類型是JSONArray
System.out.println(major.getClass().getSimpleName());//輸出:JSONArray
//car的類型是JSONObject
System.out.println(car.getClass().getSimpleName());//輸出:JSONObject
//輸出:
//{"name":"王小二","age":25,"birthday":"1990-01-01","school":"藍翔","major":["理發(fā)","發(fā)掘機"],"hasGirlfriend":false,"car":{"name":"BMW","price":500000},"house":null,"idol":"btp"}
System.out.println(jo);
System.out.println("-------------------------------分割線------------------------------------------");
//也可以使用put來構建json
JSONObject xiaomi6 = new JSONObject();
xiaomi6.put("名字", "小米6");
xiaomi6.put("價格", 2499);
xiaomi6.put("主屏尺寸", "5.15英寸");
xiaomi6.put("主屏分辨率", "1920 x 1080像素");
xiaomi6.put("電池容量", "3350mAh");
JSONArray camera = new JSONArray();
JSONObject backCamera = new JSONObject();
backCamera.put("主", "1200萬像素");
backCamera.put("副", "1200萬像素");
camera.add(backCamera);
camera.add("800萬像素");
xiaomi6.put("攝像頭", camera);
JSONArray competitor = new JSONArray();
competitor.add("samsung S8");
competitor.add("huawei P10");
competitor.add("Iphone7 red");
xiaomi6.put("友商", competitor);
Map<String,Object> leijunMap = new HashMap<String,Object>();
leijunMap.put("姓名", "Mr.雷");
leijunMap.put("年齡", 48);
leijunMap.put("職位", new String[]{"小米總裁","流行音樂引導者","小米之家創(chuàng)始人"});
leijunMap.put("愛好", "Are you OK?");
//JSONObject leijunOB = JSONObject.fromObject(leijunMap);
xiaomi6.put("promulgator", leijunMap);
System.out.println(xiaomi6);
//格式化xiaomi6
/*
{
"名字": "小米6",
"價格": 2499,
"主屏尺寸": "5.15英寸",
"主屏分辨率": "1920 x 1080像素",
"電池容量": "3350mAh",
"攝像頭": [
{
"主": "1200萬像素",
"副": "1200萬像素"
},
"800萬像素"
],
"友商": [
"samsung S8",
"huawei P10",
"Iphone7 red"
],
"promulgator": {
"姓名": "Mr.雷",
"愛好": "Are you OK?",
"年齡": 48,
"職位": [
"小米總裁",
"流行音樂引導者",
"小米之家創(chuàng)始人"
]
}
}
*/
//net.sf.json對json和bean相互轉化不大友好,Gson在bean和json轉化方面做得更為出色
}
}