• [Java IO]06_JSON操作


    6.1 JSON 知识背景

    6.1.1 JSON 简介

    JSON: JavaScript Object Notation(JavaScript 对象表示法)

    JSON 是存储和交换文本信息的语法。类似 XML

    JSON XML 更小、更快,更易解析。

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

    6.1.2 JSON 语法

    JSON 语法规则

    • 数据在名称/值对中
    • 数据由逗号分隔
    • 花括号保存对象
    • 方括号保存数组

    JSON 名称/值对

    JSON 数据的书写格式是:名称/值对。

    名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

    “name” : “zhangsan”

    这很容易理解,等价于这条 JavaScript 语句:

    Name = “zhangsan”

    JSON 值类型

    JSON 值可以是:

    • 字符串(在双引号中)
    • 数字(整数或浮点数)
    • 对象(在花括号中)
    • 数组(在方括号中)
    • 逻辑值(true false
    • Null

    值的数据类型图:

    6.1.3 JSON 的数据结构

    JSON有两种数据结构:对象和数组。

    JSON 对象

    对象是一个无序的“‘名称/值’对”集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 associative array)。

    一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

    JSON 对象在花括号中书写:

    { "name":"zhangsan" , "age":24 }

    这一点也容易理解,与这条 JavaScript 语句等价:

    name = "zhangsan"

    age = 24

    参考图如下:

    JSON 数组

    值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

    JSON 数组在方括号中书写:

    数组可包含多个对象:

    {

             "people": [

                       { "namr":"zhangsan" , "age":22 },

                       { "name":"lisi" , "age":24 },

                       { "name":"wangwu" , "age":27 }

             ]

    }

    在上面的例子中,对象 "employees" 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。

    参考图如下:

    6.2 Java 中操作 JSON 数据

    网上有很多JAVA种操作JSONjar包,这里介绍一个最常见的jar包:json-lib

    6.2.1 Jar包下载

    下载地址:http://json-lib.sourceforge.net/

    6.2.2 基本方法

    普通数据转 JSONObject

    /**
     * 普通数据转 JSON
     
    */
    public static void JsonTest1() {
        JSONObject normalJson = new JSONObject();
        normalJson.put("name", "zhangsan");
        normalJson.put("sex", "男");
        normalJson.put("age", new Integer(22));
        System.out.println(normalJson.toString());
    }

    Map数据转 JSON

    /**
     * Map数据转 JSON
     
    */
    public static void JsonTest2() {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("name", "zhangsan"); // string 类型
        map.put("age", new Integer(22)); // number 类型
        Object obj = new String("params");
        map.put("obj", obj); // Object 类型
        map.put("array", new String[] { "a", "b", "c" }); // array 类型
        map.put("b_true", Boolean.TRUE); // boolean 类型
        map.put("b_false", Boolean.FALSE); // boolean 类型
       
        JSONObject json = JSONObject.fromObject(map);
        System.out.println(json.toString());
    }

    List 数据转 JSON

    /**
     * List数据转 JSON
     
    */
    public static void JsonTest3() {
        List<String> list = new ArrayList<String>();
        list.add("first");
        list.add("second");
        JSONArray jsonArray = JSONArray.fromObject(list);
        System.out.print(jsonArray);
    }

    数组数据转 JSON

    /**
     * 数组数据转 JSON
     
    */
    public static void JsonTest4() {
        String[] colors = new String[]{ "red", "yellow", "blue" };
        JSONArray jsonArray = JSONArray.fromObject(colors);
        System.out.println(jsonArray);
    }

    构建 JSON 文本

    JSONStringer可以用来快速构建一个JSON格式的文本,并转换成String,可以写入文件;

    JSONStringerJSONWriter的子类;

    JSONStringer一般通过object().key().value().key().value().endObject()进行构造;

    object() 表明开始一个对象,即添加'{';

    endObject() 表明结束一个对象,即添加'}';

    array() 表明开始一个数组,即添加一个'[';

    endArray() 表明结束一个数组,即添加一个']';

    key() 表示添加一个key;

    value() 表示添加一个value;

    /**
     * 构建 JSON 文本
     
    */
    public static void JsonTest5() {
        JSONStringer stringer = new JSONStringer(); 
        String str = stringer.object().key("product").value("phone").key("num").value(20).endObject().toString(); 
        System.out.println(str); 
    }

    参考资料

    http://www.json.org/

    http://www.runoob.com/json/json-tutorial.html 

  • 相关阅读:
    StrUtils单元中的函数
    windows系统字体问题
    进程间通讯(模拟远程CMD)
    sql远程连接SQL(不能打开到主机的连接,在端口 1433:连接失败)
    在delphi中三个形式:ADODB_TLB ADOInt ADODB
    安装Ms SQL Server时提示:以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机。
    从Indy9升级到Indy10时IdTcpServer的变化
    如何实现调用DOS程序的时候的管道输入重定向!
    接口技术
    SysUtils单元函数
  • 原文地址:https://www.cnblogs.com/jingmoxukong/p/4664224.html
Copyright © 2020-2023  润新知