IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 2021-09-26 -> 正文阅读

[JavaScript知识库]2021-09-26


什么是JSON

JSON:JavaScript Object Notation JS对象简谱,是一种轻量级的数据交换格式。

对象格式

一个对象,由一个大括号表示,
括号中描述对象的属性和函数,通过键值对来描述对象的属性与函数
格式:
键和值之间用冒号连接,多个键值对用逗号分隔。
键值对的键使用引号包裹
键值对中的值可以使用JS中的任意一种数据类型

  1. 用Java描述一个人
class Person{
	private String name;
	private String age;
	getter/setter/构造
}
Person p = new Person("小明",18);
  1. 用js来描述一个人
var p = new Object();
p.name = '小明';
p.age = 18;
  1. 用XML描述一个人
<person>
	<name>小明</name>
	<age>18</age>
</person>
  1. 用JSON描述一个人
{
	"name":"小明",
	"age":18
}

Java解析JSON

对象

public class Person{
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Gson

  • 将对象转换为JSON字符串
1.引入gson.jar
2.调用GsontoJSON(obj)

举例:

public class GsonTest {
    public static void main(String[] args) {
        Person p = new Person("小明",18);
        String s = new Gson().toJson(p);
        System.out.println(s);
    }
}

结果:

{"name":"小明","age":18}
  • string转为对象
    举例:
public class GsonTest {
    public static void main(String[] args) {
        String s = "{\"age\":18,\"name\":\"小明\"}";
        Person person = new Gson().fromJson(s, Person.class);
        System.out.println(person);
    }
}

结果:

com.dmlll.Person@2a17b7b6

fastjson

  • 将对象转换为JSON字符串
1.引入fastjson.jar
2.使用fastjson的JSON.toJSONString(obj)

举例

public class FastTest {
    public static void main(String[] args) {
        Person p = new Person("小明",18);
        String string = JSON.toJSONString(p);
        System.out.println(string);
    }
}

结果:

{}

此时打印不出json字符串,原因在于FastJSON是根据对象类的getter、setter方法获得JSON,此时应该为Person类添加getter、setter方法。

public class Person{
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

继续运行FastTest,结果:

{"age":18,"name":"小明"}
  • string转为对象
public class FastTest {
    public static void main(String[] args) {
        String s = "{\"name\":\"小明\",\"age\":18}";
        Person person = JSON.parseObject(s, Person.class);
        System.out.println(person);
    }
}

结果:

com.dmlll.Person@6f1fba17

Jackson

  • 将对象转换为JSON字符串
1.引入jackson-databind.jar、jackson-core.jar、jackson-annotations.jar
2.使用fastjson的JSON.toJSONString(obj)
public class JackTest {
    public static void main(String[] args) throws JsonProcessingException {
        Person p = new Person("小明",18);
        ObjectMapper objectMapper = new ObjectMapper();
        String string = objectMapper.writeValueAsString(p);
        System.out.println(string);
    }
}

结果:

{"name":"小明","age":18}
  • string转为对象
public class JackTest {
    public static void main(String[] args) throws IOException {
        String s = "{\"name\":\"小明\",\"age\":18}";
        ObjectMapper objectMapper = new ObjectMapper();
        Person person = objectMapper.readValue(s, Person.class);
        System.out.println(person);
    }
}

结果:

Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.dmlll.Person` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
 at [Source: (String)"{"name":"小明","age":18}"; line: 1, column: 2]
	at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67)
	at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1452)
	at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1028)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1297)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:326)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3004)
	at com.dmlll.JackTest.main(JackTest.java:11)

使用jackson将string转换成Person(反序列化)需要使用到无参构造

public class Person {
    private String name;
    private int age;

    public Person() {
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

结果:

com.dmlll.Person@290d210d
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 13:59:39  更:2021-09-27 14:00:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 4:48:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码