JSON入门

一、简介

    1、描述
        1)JavaScript 对象表示法(JavaScript Object Notation)

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

        3)比 XML 更小、更快,更易解析

        4)独立于语言

    2、语法

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

            例如:

                {

         "employees": [

         { "firstName":"John" , "lastName":"Doe" },

         { "firstName":"Anna" , "lastName":"Smith" },

         { "firstName":"Peter" , "lastName":"Jones" }

         ]

         }

        2)JSON 值可以是

    • 数字(整数或浮点数)
    • 字符串(在双引号中)
    • 逻辑值(true 或 false)
    • 数组(在方括号中)
    • 对象(在花括号中)
    • null
    3、JSON对象
        1)JSON 对象在花括号中书写:
            对象可以包含多个名称/值对:
            { "firstName":"John" , "lastName":"Doe" }
        2)这一点也容易理解,与这条 JavaScript 语句等价:
            firstName = "John"
            lastName = "Doe"
    4、JSON 数组
         1)JSON 数组在方括号中书写:
                数组可包含多个对象:
[
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
二、JavaScript中解析JSON
    1、JSON字符串
         '内容’
    2、JSON字符串->JavaScript对象
         1)eval函数
            var obj = eval ("(" + txt + ")");
            注意:存在潜在的安全问题
         2)JSON解析器
            var obj = JSON.parse(txt)
三、JAVA中
    1、JSONObject
        - JSONObject.fromObject(Object object)    JSONObject       //object可以是Map,Bean,JSON字符串("{'hello':'world','abc':'xyz'}")
        - getString(String key)   String       //获取对象的属性值,类似:get(String key)  Object,get(Object key)   Object
        - put(Object key,Object value)      //增加对象的属性
        - JSONObject.toBean(JSONObject,Class)    Object      //Map,可以直接强制类型转换
    2、JSONArray
        1)转JSONArray
            - JSONArray.fromObject(Object  object)   JSONArray      //object可以是List,数组,Map,JSON字符串("['name','world']")
            - add(Object value)
            - add(int index,Object value)
        2)转List,Map,数组
            直接强制类型转换

 -------------------------------------分割线---------------------------------------------------

下面举几个具体的列子理解下上面写的内容

1、JSONObject

定义一个JavaBean

public class Student {
    private String name;
    private int Grade;
    private List<String> teachers;

    public Student() {
    }

    public Student(String name, int grade, List<String> teachers) {
        super();
        this.name = name;
        Grade = grade;
        this.teachers = teachers;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getGrade() {
        return Grade;
    }

    public void setGrade(int grade) {
        Grade = grade;
    }

    public List<String> getTeachers() {
        return teachers;
    }

    public void setTeachers(List<String> teachers) {
        this.teachers = teachers;
    }

}

主方法:

public class TestJson {
    public static void main(String[] args) {
        List<String> teacherList = new ArrayList<String>();
        teacherList.add("math");
        teacherList.add("english");
        Student stu = new Student("yaohuix", 2, teacherList);
        JSONObject jsonObject = JSONObject.fromObject(stu);
        // Bean转JSONObject或JSON字符串(只要toString())
        System.out.println(jsonObject);// 输出:{"grade":15,"name":"yaohuix","teachers":["math","english"]}
        // JSONObject或JSON字符串(只要toString())转Bean
        Student otherStu = (Student) JSONObject.toBean(jsonObject,
                Student.class);
        System.out.println(otherStu.getName());// 输出:yaohuix
        System.out.println(otherStu.getGrade());// 输出:2
        System.out.println(otherStu.getTeachers());// 输出:[math, english]
    }
}
原文地址:https://www.cnblogs.com/activity/p/4875053.html