Java Json解析方式
Json定义:
① Json 表示的是文本数据的一种表示格式
② Json 格式的文件在数据开发过程中经常能够使用到
③ 一个JONS表示为一个对象(没有方法的对象),那么就有属性名和属性值
数据形式 => Key Value形式 => Key表示为属性名 Value表示属性值
Json文件中的数据有固定的格式
格式:
1. Json文件需要使用{}进行将所有的数据包含起来
2. Json中 Key Value形式 使用:将Key和Value隔开
3. 对于Json中的Key形式 要求只能为一个字符串 (其他语言中要求Key是一个不可变的数据即可)
4. 对于Json中的Value形式不固定,可以为 字符串 数值 小数点 ...
5. 对于多个KeyValue数据要求使用 , 对其进行隔开
6. 对于多个Json可以使用数组形式表示 其格式可以用 [json,json]
7. 对于Json中的Value可以是一个Json
8. 对于Json中的Value可以是一个Json数组
json取值:
需要使用编码的方式,将当前的Json文本加载到对应的对象中(以Java为例),通过操作对象,获取其中的数据
① 对于fastJson2包中,可以通过JSON类中静态方法parse对数据进行解析
② 获取数据是通过Key进行获取的
对于Value类型可以通过不同的方法进行选择不同的返回值类型
③ 在Java的字符串中,可以使用''来代替 ""
④ 对于JSON数组和JSON对象需要使用不同的解析方式
Java解析Json
Java中解析Json可以使用第三方的Json Jar包
第三方jar包是指 由其他开发者所提供的库,在提供的库中会由相对应的类来完成特点的功能
例如: python -> pip install 按照第三方包
Java中获取及如何使用第三方包?
获取fastjson2-2.0.40.jar
获取包的方式:
1.去对应提供包的第三方官网下载
2.去集中的仓库中下载对应的包(MVN的仓库https://mvnrepository.com/)
找到对应版本
点击jar下载
下一步,导入idea中
在IDEA项目根路径中创建目录lib并将jar包复制到当前lib目录下
右键选择jar包,再点击add as…(添加到库)
点击OK
如何看是否导进去?
项目结构里面查看如:
Json解析实际操作
package com.test.demo23;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
public class Demo12Json {
public static void main(String[] args) {
/*
JSON.parse 可以对Json的字符串进行解析
*/
String str="{'1':'one','2':'two'}";
Object parse = JSON.parse(str);// 直接返回的是一个Object对象 但是对于Json有专门的Json对象 JSONObject
JSONObject jsonObject = JSON.parseObject(str);//返回JSONObject对象
String value = jsonObject.getString("1");//JSONObject获取key值2,返回value值
System.out.println("value:"+value);//value:one
String jsonStr = "{'name':'王建军','age': 20,'score':80.5}";
JSONObject jsonObject2 = JSON.parseObject(jsonStr);
String name = jsonObject2.getString("name");
System.out.println("name:" + name);
Integer age = jsonObject2.getInteger("age");
System.out.println("age:" + age);
Double score = jsonObject2.getDouble("score");
System.out.println("score:" + score);
//Json数组
String jsonArr = "[{'name':'王建军','age': 20,'score':80.5},{'name':'张胜兵','age': 18,'score':90.5}]";
//转换成Json数组
JSONArray jsonArray = JSON.parseArray(jsonArr);
// 数组可以通过下标进行取值
JSONObject jsonObjectIndex1 = jsonArray.getJSONObject(1);
System.out.println("name:"+jsonObjectIndex1.getString("name"));//name:张胜兵
// fori形式获取
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObjectIndex = jsonArray.getJSONObject(i);
String oneName = jsonObjectIndex.getString("name");
System.out.println(oneName);
}
//王建军
//张胜兵
}
}
package com.test.demo23;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class Demo13ToJson {
public static void main(String[] args) throws FileNotFoundException {
/*
在fastJson2包中:对于一个对象,如果要转成JSON,那么对象中需要设置get Set 方法
*/
// 创建ArrayList并添加User对象
ArrayList<User> arrayList = new ArrayList<>();
arrayList.add(new User("李帅臻", "1314520"));
arrayList.add(new User("李真师", "3344520"));
// 将对象转换成JSON字符串并打印
//方式一
for (User user : arrayList) {
JSONObject json = (JSONObject) JSON.toJSON(user);
System.out.println(json.toString());
//方式二
String jsonString = JSON.toJSONString(user);
System.out.println(jsonString);
// 直接将数据写入到一个Json文件中
// JSON.writeTo(new FileOutputStream("data/user.json",true),user);
}
//上述结果:
/*
{"name":"李帅臻","passwd":"1314520"}
{"name":"李帅臻","passwd":"1314520"}
{"name":"李真师","passwd":"3344520"}
{"name":"李真师","passwd":"3344520"}
*/
// 使用间接的方式将 ArrayList转成一个 JSONArray
JSONArray jsonArray = new JSONArray();
for (User user : arrayList) {
Object json = JSON.toJSON(user);
jsonArray.add(json);
}
// [{"name":"李帅臻","passwd":"1314520"},{"name":"李真帅","passwd":"3344520"}]
System.out.println(jsonArray.toString());
// jsonArray 如何转成一个ArrayList
// 可以将JSON字符串转成一个List集合
List<User> users = JSON.parseArray(jsonArray.toString(), User.class);
System.out.println(users);
//[User{name='李帅臻', passwd='1314520'}, User{name='李真师', passwd='3344520'}
// 将一个json字符串对象转成自定义对象
User user = JSON.parseObject("{\"name\":\"李真帅\",\"passwd\":\"3344520\"}", User.class);
System.out.println(user);
//User{name='李真帅', passwd='3344520'}
}
// 定义User类
static class User {
private String name;
private String passwd;
public User(String name, String passwd) {
this.name = name;
this.passwd = passwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", passwd='" + passwd + '\'' +
'}';
}
// getter和setter方法省略...
}
}
toString() {
return “User{” +
“name='” + name + ‘’’ +
“, passwd='” + passwd + ‘’’ +
‘}’;
}
// getter和setter方法省略…
}
}
版权归原作者 小柔的 所有, 如有侵权,请联系我们删除。