zoukankan      html  css  js  c++  java
  • JSON详解

    JSON对象

    JSON:JavaScript对象表示法(JavaScript Object Notation)跨语言使用

    json   基本类型 {“key”:value, “key”:value……}

           数组类型 {[{“key”:value },{ key”:value }……]} 在打印中大括号没显示

           基本类型与数组类型能够相互嵌套

    {

    "name": "teacher",

    "computer": {

    "CPU": "intel7",

    "disk": "512G"

    },

    "students": [

    {

    "name": "张三",

    "age": 18,

    "sex": true

    },

    {

    "name": "李四",

    "age": 19,

    "sex": false

    }

    ]

    }

    注意:  存储结构是KEY-VALUE

    keystring类型

    value:String Boolean Number 数组 Object null

    Json 串以{开始,以}结尾;

    Json 串中数组是以[开始,以]结尾;

    Json 串中 Object 是以{开始,以}结尾

    由于json中存在双引号,手动拼接json对象需要对引号进行转义

    gson解析处理

    google提供的类库,将JSON字符串与java对象转换

    将架包设置在web项目的 web-inflib目录下

    将java对象转为Json字符串

    首先获取对象,再将对象转为字符串

    对象也可以是数组和容器对象

    String json引用=new Gson().toJson(对象);

    或者预先对转换器进行声明

    Gson gson=new Gson();

    String json引用=gson.toJson(对象);

    User user = new User(1,"zhangsan","123123");

    String json = new Gson().toJson(user);

    System.out.println(json);

    将Json字符串转为java对象

    直接转换

           先创建转换器

           Gson gson = new Gson();

           根据数组还是对象执行不同的参数

    1     Json字符串为单一javabean对象

           类名 对象引用=gson.fromJson(jsonstr, 对象引用.class)

    Gson gson = new Gson();      

    User user = gson.fromJson(json, User.class);

    //采用user接收json字符串的,参数为用来接收的反射类

    (注意,接收对象的javabean需要空构造)

    2     Json字符串为一维数组 数组内无多层嵌套

           容器<范型> 引用=

    gson.fromJson(jsonstr,new TypeToken<容器<范型>>(){}.getType());

    String json2 = "["aaa","bbb","bbb"]";

    Gson gson = new Gson();

    List<String> list =

    gson.fromJson(json2, new TypeToken<List<String>>(){}.getType());

    //通过list容器存储

    若Json字符串为多个对象的数组,将范型改为对应的对象类

    String json3 = "[{"userId":1,"userName":"zhangsan","userPwd":"123123"},{"userId":2,"userName":"lisi","userPwd":"111111"},{"userId":3,"userName":"wangwu","userPwd":"234567"}]";

    Gson gson = new Gson();

    List<User> userList =

    gson.fromJson(json3, new TypeToken<List<User>>(){}.getType());

           若存在多层嵌套可以在接收对象中存在参数为容器,才能存储

    节点解析

    1获取解析器

    JsonParser parser = new JsonParser();

    2json字符串转为JsonElement对象

    JsonElement element= parser.prese(jsonstr);

    3获取节点,解析节点

        获取根节点;再在根节点的基础上获取各个节点;若节点为可取值节点则进行取值

    根节点的获取

    JsonObject root = element.getAsJsonObject();根节点为对象

    根节点若为数组的情况通过Array进行接收

    下级节点的获取

    JsonObject 子节点= 父节点.getAsJsonObject(“key”);

    JsonPrimitive 子节点= 父节点.getAsJsonPrimitive(“key”);

    JsonArray 子节点=父节点.getAsJsonArray(“key”);

    节点的取值

        JsonPrimitive类型

        String name = primitive2.getAsString();

        boolean flag = primitive.getAsBoolean();

    通过各数据类型的getAs数据类型()方法获取值

        JsonObject 类型

           通过javabean接收

           User user = new Gson().fromJson(userObject, User.class);

        JsonArray类型

           通过容器接收.同上

       

    节点概念

    Gson的节点对象:

    JsonElement    所有的节点都是JsonElement 对象

    JsonPrimitive  基本的数据类型的节点对象

    JsonNull      代表空节点对象,即 有 key,value 为空

    JsonObject    对象数据类型的节点对象

    JsonArray     数组数据类型的节点对象

    JsonElement的取值:

    1   JsonPrimitive  value的取值对应 java 的

    int,double,float,long,short,boolean,char,byte,String,

    BigDecimal,BigI nteger,Number

    2   JsonObject    value 的取值对应 java 的 Object 对象.

    3   JsonArray     value 的取值对应 java 的 List 及其子类对象.

    注:数组节点也能通过增强for遍历进行处理

    for (JsonElement user : jsonArray) {

    UserBean userBean =

    new Gson().fromJson(user, new TypeToken<UserBean>() {}.getType());}

    FastJson解析处理

    对象转字符串

    对象转json通过静态方法实现

    JSON.toJSONString(对象)        使用所有对象

    json字符串转对象

    对象       通过JSON.parseObject()方法

    UserBean user=JSON.parseObject(jsonstr, UserBean.class )

    容器(数组)     通过JSON.parseArray ()方法

    List<String> list = JSON.parseArray(json2, String.class);

    List<User> userList = JSON.parseArray(json3, User.class);

           均为静态方法

  • 相关阅读:
    关系数据库&&NoSQL数据库
    NoSQL
    大数据时代的数据存储,非关系型数据库MongoDB
    判断是否为BST
    百度2017暑期实习生编程题
    memset()实现及细节
    在必须返回一个对象时,不要去尝试返回一个引用
    返回局部变量指针
    用引用返回值
    数组形参
  • 原文地址:https://www.cnblogs.com/javaxiaobu/p/11136150.html
Copyright © 2011-2022 走看看