Json基础

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 库支持许多不同的编程语言,这样数据就可以跨平台交换。

  • 使用范围

    1. 用于编写基于 JavaScript 应用程序,包括浏览器扩展和网站。

    2. JSON 格式可以用于通过网络连接序列化和传输结构化数据。

    3. 主要用于在服务器和 Web 应用程序之间传输数据。

    4. Web 服务和 APIs 可以使用 JSON 格式提供公用数据。

    5. 还可以用于现代编程语言中。

  • 与XMl的不同

    1. 没有结束标签
    2. 更短
    3. 读写速度更快
    4. 能够使用内建的 JavaScript eval() 方法进行解析
    5. 使用数组
    6. 不使用保留字
//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解析器
  1. eval() 函数可编译并执行任何 JavaScript 代码。这隐藏了一个潜在的安全问题。

  2. 使用 JSON 解析器将 JSON 转换为 JavaScript 对象是更安全的做法。JSON 解析器只能识别 JSON 文本,而不会编译脚本。

  3. 在很多浏览器中,提供了原生的 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实体映射
JSONJava
stringjava.lang.String
numberjava.lang.Number
true | falsejava.lang.Boolean
nullnull
arrayjava.util.List
objectjava.util.Map

解码时,java.util.List 的默认具体类是 org.json.simple.JSONArrayjava.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

使用JSONObjectJSONArray,其中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 文件,解析它们,然后做以下两件事情:

  1. 把它们显示到网页上之前将解析的值存储到变量中便于进一步处理。

  2. 直接分配数据给网页中的 DOM 元素,那么它就会显示在站点上。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值