JSON
JSON简介
JavaScript Object Notation,JavaScript对象表示法。是存储和交换文本信息的方法,类似于XML,但更小、更快、更易解析。
JSON是一种轻量级的基于文本的开放标准,被设计用于可读的数据交换。约定使用 JSON 的程序包括 C,C++,Java,Python,Perl 等等。
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
//无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。
-
JSON 的网络媒体类型是 application/json。
-
JSON的文件类型是**.json**
-
把任何 JavaScript 对象变成 JSON,就是把这个对象序列化成一个 JSON 格式的字符串,这样才能够通过网络传递给其他计算机。
-
JSON 解析器和 JSON 库支持许多不同的编程语言,这样数据就可以跨平台交换。
-
使用范围
-
用于编写基于 JavaScript 应用程序,包括浏览器扩展和网站。
-
JSON 格式可以用于通过网络连接序列化和传输结构化数据。
-
主要用于在服务器和 Web 应用程序之间传输数据。
-
Web 服务和 APIs 可以使用 JSON 格式提供公用数据。
-
还可以用于现代编程语言中。
-
-
与XMl的不同
- 没有结束标签
- 更短
- 读写速度更快
- 能够使用内建的 JavaScript eval() 方法进行解析
- 使用数组
- 不使用保留字
//JSON:
{
"company": Volkswagen,
"name": "Vento",
"price": 800000
}
<!--XML-->
<car>
<company>Volkswagen</company>
<name>Vento</name>
<price>800000</price>
</car>
JSON语法
- 数据在名称/值对中
"firstName" : "John"
//等价JavaScript语句
firstName = "John"
值可以是:数字(整数或浮点数)、字符串(双引号)、布尔值(true或false)、数组(在方括号[]中)、对象(在花括号{}中)、null
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON使用
在后台应用程序中将响应数据封装成JSON格式,传到前台页面之后,需要将JSON格式转换为JavaScript对象,然后在网页中使用该数据。
<p>
名: <span id="fname"></span><br>
姓: <span id="lname"></span><br>
</p>
<script>
var txt = '{"employees":[' +
'{"firstName":"John","lastName":"Doe" },' +
'{"firstName":"Anna","lastName":"Smith" },' +
'{"firstName":"Peter","lastName":"Jones" }]}';
var obj = eval ("(" + txt + ")");
document.getElementById("fname").innerHTML=obj.employees[1].firstName //第一种元素取法
document.getElementById("lname").innerHTML=obj.employees[1]["lastName"] //第两种元素取法
</script>
- JSON解析器
-
eval() 函数可编译并执行任何 JavaScript 代码。这隐藏了一个潜在的安全问题。
-
使用 JSON 解析器将 JSON 转换为 JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。
-
在很多浏览器中,提供了原生的 JSON 支持,而且 JSON 解析器的速度更快。
- 使用for-in循环取元素
for (x in myObj) {
document.getElementById("demo").innerHTML += myObj[x] + "
";
}
for (x in myObj) {
document.getElementById("demo").innerHTML += x + "
";
}
JSON基础结构
- 对象结构
var jsonObj =
{
"键名1":值1,
"键名2":值2,
//……
"键名n":值n
}
- 数组结构
//无序数组
var arr =
[
{
"键名1":值1,
"键名2":值2
},
{
"键名3":值3,
"键名4":值4
},
//……
]
//有序数组
var arr =
{
"1":{
"键名1":值1,
"键名2":值2
},
"2":{
"键名3":值3,
"键名4":值4
},
//……
}
JSON转换
- 修改JSON数据
//用点号和括号访问数据,直接修改
people.musicians[1].lastName = "Rachmaninov";
- 转换回字符串
//myObject可以是JSON对象或者JavaScript对象
String myObjectInJSON = myObject.toJSONString();
在Java中使用JSON
- 安装JSON模块
下载和安装 JSON.simple,然后把 jsonsimple-1.1.1.jar 文件的路径添加到环境变量 CLASSPATH 中
- JSON和Java实体映射
JSON | Java |
---|---|
string | java.lang.String |
number | java.lang.Number |
true | false | java.lang.Boolean |
null | null |
array | java.util.List |
object | java.util.Map |
解码时,java.util.List 的默认具体类是 org.json.simple.JSONArray,java.util.Map 的默认具体类是 org.simple.JSONObject。
- 在JAVA中编码JSON
使用java.util.HashMap的子类JSONObject编码一个JSON对象。如果需要严格的元素顺序,使用JSONValue.toJSONString(map)方法的有序映射实现,比如java.util.LinkedHashMap。
import org.json.simple.JSONObject;
class JsonEncodeDemo
{
public static void main(String[] args)
{
JSONObject obj = new JSONObject();
obj.put("name", "foo");
obj.put("num", new Integer(100));
obj.put("balance", new Double(1000.21));
obj.put("is_vip", new Boolean(true));
System.out.print(obj);
//JSON对象流
StringWriter out = new StringWriter();
obj.writeJSONString(out);
//字符串形式
String jsonText = out.toString();
System.out.print(jsonText);
}
}
- 在JAVA中解码JSON
使用JSONObject和JSONArray,其中JSONObject就是java.util.Map,JSONArray就是java.util.List,可以使用Map和List的标准操作访问。
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;
class JsonDecodeDemo
{
public static void main(String[] args)
{
JSONParser parser=new JSONParser();
String s = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
try{
Object obj = parser.parse(s);
JSONArray array = (JSONArray)obj;
System.out.println("The 2nd element of array");
System.out.println(array.get(1));
System.out.println();
JSONObject obj2 = (JSONObject)array.get(1);
System.out.println("Field \"1\"");
System.out.println(obj2.get("1"));
s = "{}";
obj = parser.parse(s);
System.out.println(obj);
s= "[5,]";
obj = parser.parse(s);
System.out.println(obj);
s= "[5,,2]";
obj = parser.parse(s);
System.out.println(obj);
}catch(ParseException pe){
System.out.println("position: " + pe.getPosition());
System.out.println(pe);
}
}
}
JSON和Ajax
通常在客户端和服务器之间使用 JSON 传递 AJAX 更新。任何使用 AJAX 更新的数据都可以使用 JSON 格式存储在 Web 服务器上。
使用 AJAX,那么 JavaScript 就可以在必要时取回这些 JSON 文件,解析它们,然后做以下两件事情:
把它们显示到网页上之前将解析的值存储到变量中便于进一步处理。
直接分配数据给网页中的 DOM 元素,那么它就会显示在站点上。