java json 本身_java操作json的一个不依赖库的方式

写在前面:时间过得真快,craftgame开发日志已经很久没更新了,因为我也没内容水了。突然发现结合开发的时候我遇到的问题写成专栏会不会好一点?干脆把开发日志变成开发教学吧!8b22ab26ef493287a87a82da4f4b89c6.png

最近忙活了一段时间,弃坑了cgmsc,但是带来了很多的东西,就比如说今天要说的json解析。

解析json

不用库解析json要怎么做呢?首先你要明白几点java本身有一个js引擎,可以用来执行js

json在js里面是原生受到支持的

js引擎是支持返回值的

java的js引擎叫做nashorn,支持传入一个String对象作为js代码被执行的,如果返回的类型是number,则会转换成java的基本数据类型类型,如果的类型是object,则会返回ScriptObjectMirror对象,而ScriptObjectMirror类实现了Map接口,也就是说ScriptObjectMirror对象本身可以当作Map对象来用,这便是其原理

那么要如何达到效果呢?众所周知,js有个东西叫做js函数,可以用类似这样的js代码来实现

function json(v){return v;}

用js引擎执行上面的代码,然后可以尝试用一个字符串描述json,然后执行这个函数,v填那个json。

如果json里面也有js对象,那么ScriptObjectMirror里面也会有ScriptObjectMirror,如果返回的是一个数组,那么键是数字

将对象转化为json

将对象的属性转化成json也不是很难,此操作是为了传输数据的,那么也没有必要把java方法也转化成json,只需要将属性转化成json即可。那么是怎么样的呢?我们知道,json是字符串,那么肯定少不了字符串操作。幸运的是,我们在这里用不到正则表达式。只需要用StringBuilder即可。那么怎么做呢?

我们知道,java还有一个东西叫做反射。用反射我们可以实现动态获取属性的名称和值。这就是我们需要的东西。Object类有一个getClass方法,可以通过一个对象获取Class对象,然后调用getFields()方法,获取到所有的属性。

想必你们应该知道我要干啥了吧,用我之前讲过的Stream api可以方便的对这个数组进行操作。我们需要getName()和get(Object)的方法,然后通过json的格式写进去。如果这个属性的值是一个对象,递归调用即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Jackson读取JSON文件的步骤如下: 1. 引入Jackson 在项目中引入Jackson,如果是Maven项目可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.12.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.2</version> </dependency> ``` 2. 创建ObjectMapper对象 ObjectMapper是Jackson中的一个类,用于将JSON字符串转换为Java对象或将Java对象转换为JSON字符串。 ```java ObjectMapper objectMapper = new ObjectMapper(); ``` 3. 读取JSON文件 使用ObjectMapper对象的readValue()方法读取JSON文件,该方法的第一个参数为JSON文件的InputStream对象,第二个参数为要转换成的Java对象的类型。 ```java File file = new File("example.json"); InputStream inputStream = new FileInputStream(file); MyClass myClass = objectMapper.readValue(inputStream, MyClass.class); ``` 其中MyClass为要转换成的Java对象的类型。 完整的读取JSON文件的示例代码如下: ```java import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; public class JsonReader { public static void main(String[] args) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); File file = new File("example.json"); InputStream inputStream = new FileInputStream(file); MyClass myClass = objectMapper.readValue(inputStream, MyClass.class); System.out.println(myClass); } } class MyClass { 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; } @Override public String toString() { return "MyClass{" + "name='" + name + '\'' + ", age=" + age + '}'; } } ``` 其中example.json文件内容为: ```json { "name": "John", "age": 30 } ``` 输出结果为: ``` MyClass{name='John', age=30} ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值