当前位置: 首页 > 工具软件 > JSON for Ruby > 使用案例 >

Json格式

殷德本
2023-12-01

目录

JSON简介

JSON 在 JavaScript 中的使用。

json 的定义

json 的访问:

JSON 在 java 中的使用

javaBean 和 json 的互转

List 和 json 的互转

map 和 json 的互转


JSON简介

   JSON是在2001年,由Douglas Crockford创建的,并且被IETF(Internet Engineering Task Force)定义为RFC 4627标准。JSON的媒体类型被定义为 application/json,而文件的后缀为.json。在2005年-2006年正式成为主流的数据格式,雅虎和谷歌就在那时候开始广泛地使用JSON格式。

   JSON是JavaScript 对象表示法(JavaScript Object Notation)。 JSON 是存储和交换文本信息的语法。类似 XML。 JSON 是一种轻量级的数据交换格式(轻量级指的是跟 xml做比较,)比 XML 更小、更快。

  它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言( 数据交换指的是客户端和服务器之间业务数据的传递格式。)。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

   把任何 JavaScript 对象变成 JSON,就是把这个对象序列化成一个 JSON 格式的字符串,这样才能够通过网络传递给其他计算机。

   JSON 使用 Javascript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHPJSP.NET)编程语言都支持JSON。

JSON 使用范围

  • 用于编写基于 JavaScript 应用程序,包括浏览器扩展和网站。
  • JSON 格式可以用于通过网络连接序列化和传输结构化数据。
  • 主要用于在服务器和 Web 应用程序之间传输数据。
  • Web 服务和 APIs 可以使用 JSON 格式提供公用数据。
  • 还可以用于现代编程语言中。

JSON的优缺点:

优点:

   数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;

   易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;  

   支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析;  

   在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取;  

   因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。

缺点:

   没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性;  

   JSON格式目前在Web Service中推广还属于初级阶段。

与 XML 相同之处

   JSON 是纯文本

   JSON 具有"自我描述性"(人类可读)

   JSON 具有层级结构(值中存在值)

   JSON 可通过 JavaScript 进行解析

   JSON 数据可使用 AJAX 进行传输

与 XML 不同之处

   没有结束标签

   更短

   读写的速度更快

   能够使用内建的 JavaScript eval() 方法进行解析

   使用数组

   不使用保留字

为什么使用 JSON?

对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:

使用 XML

  • 读取 XML 文档
  • 使用 XML DOM 来循环遍历文档
  • 读取值并存储在变量中

使用 JSON

  • 读取 JSON 字符串
  • 用 eval() 处理 JSON 字符串

Json语法:


json对象定义和基本使用:

在标准的 json 格式中,json 对象由在括号括起来,对象中的属性也就是 json 的 key 是一个字符串,所以一定要使用
双引号引起来。每组 key 之间使用逗号进行分隔。

Json 定义格式:
var 变量名 = {
    “key”: value, // Number 类型
	“key2”: “value”, // 字符串类型
	“key3”: [], // 数组类型
	“key4”: {}, // json 对象类型
	“key5”: [{}, {}] // json 数组
};

json对象访问:

json 对象,顾名思义,就知道它是一个对象。里面的 key 就是对象的属性。我们要访问一个对象的属性,只需要使
用【对象名.属性名】的方式访问即可。

<script type="text/javascript">
    // json 的定义
    var jsons = {
        "key1":"abc", // 字符串类型
        "key2":1234, // Number
        "key3":[1234,"21341","53"], // 数组
        "key4":{ // json 类型
        "key4_1" : 12,
        "key4_2" : "kkk"
    },
    "key5":[{ // json 数组
        "key5_1_1" : 12,
        "key5_1_2" : "abc"
    },{
        "key5_2_1" : 41,
        "key5_2_2" : "bbj"
    }]
    };
    // 访问json 的属性
    alert(jsons.key1); // "abc"
    // 访问json 的数组属性
    alert(jsons.key3[1]); // "21341"
    // 访问json 的json 属性
    alert(jsons.key4.key4_1);//12
    // 访问json 的json 数组
    alert(jsons.key5[0].key5_1_2);//"abc"
</script>

JSON 在 JavaScript 中的使用。

json 的定义

   json 是由键值对组成,并且由花括号(大括号)包围。每个键由引号引起来,键和值之间使用冒号进行分隔,多组键值对之间进行逗号进行分隔。

var jsonObj = {
    "key1": 12,
    "key2": "abc",
    "key3": true,
    "key4": [
        11,
        "arr",
        false
    ],
    "key5": {
        "key5_1": 551,
        "key5_2": "key5_2_value"
    },
    "key6": [
        {
            "key6_1_1": 6611,
            "key6_1_2": "key6_1_2_value"
        },
        {
            "key6_2_1": 6621,
            "key6_2_2": "key6_2_2_value"
        }
    ]
};

json 的访问:

   json 本身是一个对象。
   json 中的 key 我们可以理解为是对象中的一个属性。
   json 中的 key 访问就跟访问对象的属性一样:json 对象.key

alert(typeof(jsonObj));// object json 就是一个对象
alert(jsonObj.key1); //12
alert(jsonObj.key2); // abc
alert(jsonObj.key3); // true
alert(jsonObj.key4);// 得到数组[11,"arr",false]
// json 中 数组值的遍历
for(var i = 0; i < jsonObj.key4.length; i++) {
alert(jsonObj.key4[i]);
}
alert(jsonObj.key5.key5_1);//551
alert(jsonObj.key5.key5_2);//key5_2_value
alert( jsonObj.key6 );// 得到 json 数组
// 取出来每一个元素都是 json 对象
var jsonItem = jsonObj.key6[0];
// alert( jsonItem.key6_1_1 ); //6611
alert( jsonItem.key6_1_2 ); //key6_1_2_value

json 的两个常用方法:

JSON.stringify()把 json 对象转换成为 json 字符串
JSON.parse()把 json 字符串转换成为 json 对象

 json 的存在有两种形式。
   一种是:对象的形式存在,我们叫它 json 对象。
   一种是:字符串的形式存在,我们叫它 json 字符串。
   一般我们要操作 json 中的数据的时候,需要 json 对象的格式。
   一般我们要在客户端和服务器之间进行数据交换的时候,使用 json 字符串。 

// 把 json 对象转换成为 json 字符串
var jsonObjString = JSON.stringify(jsonObj);

// 特别像 Java 中对象的 toString

alert(jsonObjString)
// 把 json 字符串。转换成为 json 对象
var jsonObj2 = JSON.parse(jsonObjString);
alert(jsonObj2.key1);// 12
alert(jsonObj2.key2);// abc

JSON 在 java 中的使用

我们要使用 json 和 java 中使用,我们需要使用到一个第三方的包。它就是 gson.jar。

Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个 JSON字符串转成一个 Java 对象,或者反过来。

javaBean 和 json 的互转

@Test
public void test1() {
    Person person = new Person(1, "国哥好帅!");
    // 创建 Gson 对象实例
    Gson gson = new Gson();
    // toJson 方法可以把 java 对象转换成为 json 字符串
    String personJsonString = gson.toJson(person);
    System.out.println(personJsonString);
    // fromJson 把 json 字符串转换回 Java 对象
    // 第一个参数是 json 字符串
    // 第二个参数是转换回去的 Java 对象类型
    Person person1 = gson.fromJson(personJsonString, Person.class);
    System.out.println(person1);
}
需要导入fastjson:import com.alibaba.fastjson.JSON;
 
// dto 转 json
String json = JSON.toJSONString(dto)
 
// json 转 dto
DTO dto = JSON.parseObject(str, DTO.class)

List 和 json 的互转

//List 和 json 的互转
@Test
public void test2() {
    List<Person> personList = new ArrayList<>();
    personList.add(new Person(1, "国哥"));
    personList.add(new Person(2, "康师傅"));
    Gson gson = new Gson();
    // 把 List 转换为 json 字符串
    String personListJsonString = gson.toJson(personList);
    System.out.println(personListJsonString);
    List<Person> list = gson.fromJson(personListJsonString,new PersonListType().getType());
    System.out.println(list);
    Person person = list.get(0);
    System.out.println(person);

}

map 和 json 的互转

//map 和 json 的互转
@Test
public void test3(){
    Map<Integer,Person> personMap = new HashMap<>();
    personMap.put(1,new Person(1,"国哥好帅"));
    personMap.put(2,new Person(2,"康师傅也好帅"));

    Gson gson = new Gson();
    // 把 map 集合转换成为 json 字符串
    String personMapJsonString = gson.toJson(personMap);
    System.out.println(personMapJsonString);

    // Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new PersonMapType().getType());
    Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new
    TypeToken<HashMap<Integer,Person>>(){}.getType());
    System.out.println(personMap2);
    Person p = personMap2.get(1);
    System.out.println(p);
}
 类似资料: