JSON数据如何遍历获取每个数据对象

JSON数据怎么获取获取每个数据对象啊,java技术

[
    {
        "mac": "004A770124070C13",
        "appeui": "2C26C50124194000",
        "last_update_time": "20230525151128",
        "data": "485a5257534b4a68456bdc0e0ca21a00000000000000000000000008a40000000000000000000000007616",
        "reserver": "null",
        "data_type": 2,
        "gateways": [
            {
                "fcntdown": "2",
                "fcntup": "2",
                "gweui": "70b3d5fffe88b46f",
                "rssi": "-25",
                "lsnr": "9.0",
                "alti": "null",
                "lng": "null",
                "datarate": "SF7",
                "is_classb": "0",
                "lati": "null"
            }
        ]
    },
    {
        "mac": "004A770124070C06",
        "appeui": "2C26C50124194000",
        "last_update_time": "20230525151128",
        "data": "485a5257534b4a68456cdc0e0ca21a00000000000000000000000008a40000000000000000000000007716",
        "reserver": "null",
        "data_type": 2,
        "gateways": [
            {
                "fcntdown": "11",
                "fcntup": "11",
                "gweui": "70b3d5fffe88b46f",
                "rssi": "-41",
                "lsnr": "9.5",
                "alti": "null",
                "lng": "null",
                "datarate": "SF7",
                "is_classb": "0",
                "lati": "null"
            }
        ]
    },
    {
        "mac": "004A7701240706DD",
        "appeui": "2C26C50124194000",
        "last_update_time": "20230525151128",
        "data": "485a5257534b4a684500000000a21a00000000000000000000000008a40000000000000000000000001516",
        "reserver": "null",
        "data_type": 2,
        "gateways": [
            {
                "fcntdown": "2",
                "fcntup": "2",
                "gweui": "70b3d5fffe88b46f",
                "rssi": "-32",
                "lsnr": "10.2",
                "alti": "null",
                "lng": "null",
                "datarate": "SF7",
                "is_classb": "0",
                "lati": "null"
            }
        ]
    }
]

```

该回答引用chatgpt:Fastjson

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;

// 假设你有一个名为 json 的字符串,包含了 JSON 数据
String json = "[{...}, {...}, {...}]"; // JSON 数据省略

// 使用 Fastjson 解析 JSON 数据
JSONArray jsonArray = JSON.parseArray(json);

// 遍历 jsonArray 获取每个数据对象
for (int i = 0; i < jsonArray.size(); i++) {
    JSONObject jsonObject = jsonArray.getJSONObject(i);

    // 获取对象的属性
    String mac = jsonObject.getString("mac");
    String appeui = jsonObject.getString("appeui");
    // 获取其他属性...

    // 创建对象或进行其他操作...
}


  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/227277
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:利用Java反射机制实现对象与json字符串互相转化
  • 除此之外, 这篇博客: JSON学习笔记中的 Java对象转换为JSON 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 使用步骤:

    • 1. 导入jackson的相关jar包
    • 2. 创建Jackson核心对象 ObjectMapper
    • 3. 调用ObjectMapper的相关方法进行转换

    所用方法如下:

    writeValue(File resultFile, Object value);// 将value数据转换成字符串,并保存到指定文件中。其中value可以是数组、对象、List集合、Map集合等
    writeValue(Writer w, Object value);// 将value数据转换成JSON字符串,然后将JSON数据填充到字符输出流中
    writeValue(OuputStream os, Object value);// 将value数据转换成JSON字符串,然后将JSON字符串填充到字节输出流中
    writeValueAsString(Object value);// 将value数据转换成JSON格式字符串返回,用得最多

    实例:

    public class Java2Json {
        public static void main(String[] args) throws IOException {
            // 1.创建Jackson核心对象 ObjectMapper
            ObjectMapper mapper=new ObjectMapper();
            // 2.调用ObjectMapper的相关方法进行转换
            // 2.1 转换实体类对象
            Person person=new Person();
            person.setUsername("张三");
            person.setPassword("123456");
            String s_obj = mapper.writeValueAsString(person);
            System.out.println(s_obj);
            // 2.2 转换List集合对象
            List<Person> personList=new ArrayList<>();
            for(int i=1;i<=5;i++){
                Person p=new Person();
                p.setUsername("张三_"+i);
                p.setPassword("123456");
                personList.add(p);
            }
            String s_list = mapper.writeValueAsString(personList);
            System.out.println(s_list);
            // 2.3 转换Map集合对象
            Map<String,Person> map=new HashMap<>();
            map.put("person1",person);
            map.put("person2",person);
            map.put("person3",person);
            String s_map = mapper.writeValueAsString(map);
            System.out.println(s_map);
        }
    }
    
    class Person{
        private String username;
        private String password;
    
        public Person() {
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    '}';
        }
    }
    
  • 您还可以看一下 黄菊华老师的微信小程序Json数据使用专题课程中的 微信小程序入门到就业课(全栈课)学习说明【建议看下】小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    针对如何使用Java遍历JSON数据,并获取每个数据对象的信息,可以按照以下步骤实现:

    1. 导入JSON处理库,比如阿里的fastjson或者谷歌的Gson。

    2. 将JSON字符串转换为Java对象。使用JSON处理库提供的相关方法,将JSON字符串转换为Java对象。例如使用fastjson库提供的parseObject方法:

    String jsonString = "{...}"; // 将JSON字符串存储在字符串变量中
    JSONObject jsonObject = JSON.parseObject(jsonString); // 将JSON字符串转换为JSONObject对象
    
    1. 遍历JSON对象的每个属性。使用JSONObject对象提供的entrySet方法,可以获取JSON对象的每个属性的键值对,并用迭代器进行遍历。如下所示:
    for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
        String key = entry.getKey();
        Object value = entry.getValue();
        //对每个属性进行处理,并提取需要的信息
    }
    
    1. 提取需要的信息。根据JSON数据的结构,使用JSONObject对象的getXXX()方法获取需要的信息,如下所示:
    String detail = jsonObject.getString("detail"); // 获取名为"detail"的字符串属性
    JSONObject detailObject = JSON.parseObject(detail); // 将detail字符串转换为JSONObject对象
    int id = detailObject.getIntValue("id"); // 获取detail对象中的整数属性"id"
    String name = detailObject.getString("name"); // 获取detail对象中的字符串属性"name"
    // 其它需要提取的属性
    

    完整的代码实现如下:

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    
    public class JsonTraversal {
    
        public static void main(String[] args) {
            String jsonString = "{...}"; // 将JSON字符串存储在字符串变量中
            JSONObject jsonObject = JSON.parseObject(jsonString); // 将JSON字符串转换为JSONObject对象
    
            String detail = jsonObject.getString("detail"); // 获取名为"detail"的字符串属性
            JSONObject detailObject = JSON.parseObject(detail); // 将detail字符串转换为JSONObject对象
            int id = detailObject.getIntValue("id"); // 获取detail对象中的整数属性"id"
            String name = detailObject.getString("name"); // 获取detail对象中的字符串属性"name"
            // 其它需要提取的属性
    
            // 遍历JSON对象的每个属性
            for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
                String key = entry.getKey();
                Object value = entry.getValue();
                //对每个属性进行处理,并提取需要的信息
            }
        }
    }
    

    如果JSON数据比较复杂,包含多层嵌套,可以使用递归的方式进行遍历。但是需要注意避免出现空指针异常。

直接上代码吧
可以使用GSON库来解析JSON数据,前提是需要先将JSON数据转化为字符串。

以下是一段使用GSON解析JSON数据的示例代码:



import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.List;

public class JsonParser {

    public static void main(String[] args) {
        String jsonString = "[{\"mac\":\"004A770124070C13\",\"appeui\":\"2C26C50124194000\",\"last_update_time\":\"20230525151128\",\"data\":\"485a5257534b4a68456dc0e0ca21a00000000000000000000000008a40000000000000000000000007616\",\"reserver\":\"null\",\"data_type\":2,\"gateways\":[{\"fcntdown\":\"2\",\"fcntup\":\"2\",\"gweui\":\"70b3d5fffe88b46f\",\"rssi\":\"-25\",\"lsnr\":\"9.0\",\"alti\":\"null\",\"lng\":\"null\",\"datarate\":\"SF7\",\"is_classb\":\"0\",\"lati\":\"null\"}]},{\"mac\":\"004A770124070C06\",\"appeui\":\"2C26C50124194000\",\"last_update_time\":\"20230525151128\",\"data\":\"485a5257534b4a68456dc0e0ca21a00000000000000000000000008a40000000000000000000000007716\",\"reserver\":\"null\",\"data_type\":2,\"gateways\":[{\"fcntdown\":\"11\",\"fcntup\":\"11\",\"gweui\":\"70b3d5fffe88b46f\",\"rssi\":\"-41\",\"lsnr\":\"9.5\",\"alti\":\"null\",\"lng\":\"null\",\"datarate\":\"SF7\",\"is_classb\":\"0\",\"lati\":\"null\"}]},{\"mac\":\"004A7701240706DD\",\"appeui\":\"2C26C50124194000\",\"last_update_time\":\"20230525151128\",\"data\":\"485a5257534b4a684500000000a21a00000000000000000000000008a40000000000000000000000001516\",\"reserver\":\"null\",\"data_type\":2,\"gateways\":[{\"fcntdown\":\"2\",\"fcntup\":\"2\",\"gweui\":\"70b3d5fffe88b46f\",\"rssi\":\"-32\",\"lsnr\":\"10.2\",\"alti\":\"null\",\"lng\":\"null\",\"datarate\":\"SF7\",\"is_classb\":\"0\",\"lati\":\"null\"}]}]";

        Gson gson = new Gson();
        Type listType = new TypeToken<List<Data>>(){}.getType();
        List<Data> dataList = gson.fromJson(jsonString, listType);

        for (Data data : dataList) {
            System.out.println("mac: " + data.mac);
            System.out.println("appeui: " + data.appeui);
            System.out.println("last_update_time: " + data.last_update_time);
            System.out.println("data: " + data.data);
            System.out.println("reserver: " + data.reserver);
            System.out.println("data_type: " + data.data_type);

            for (Gateway gateway : data.gateways) {
                System.out.println("fcntdown: " + gateway.fcntdown);
                System.out.println("fcntup: " + gateway.fcntup);
                System.out.println("gweui: " + gateway.gweui);
                System.out.println("rssi: " + gateway.rssi);
                System.out.println("lsnr: " + gateway.lsnr);
                System.out.println("alti: " + gateway.alti);
                System.out.println("lng: " + gateway.lng);
                System.out.println("datarate: " + gateway.datarate);
                System.out.println("is_classb: " + gateway.is_classb);
                System.out.println("lati: " + gateway.lati);
                System.out.println();
            }
        }
    }

    private static class Data {
        String mac;
        String appeui;
        String last_update_time;
        String data;
        String reserver;
        int data_type;
        List<Gateway> gateways;
    }

    private static class Gateway {
        String fcntdown;
        String fcntup;
        String gweui;
        String rssi;
        String lsnr;
        String alti;
        String lng;
        String datarate;
        String is_classb;
        String lati;
    }

}

输出结果为:

mac: 004A770124070C13
appeui: 2C26C50124194000
last_update_time: 20230525151128
data: 485a5257534b4a68456dc0e0ca21a00000000000000000000000008a40000000000000000000000007616
reserver: null
data_type: 2
fcntdown: 2
fcntup: 2
gweui: 70b3d5fffe88b46f
rssi: -25
lsnr: 9.0
alti: null
lng: null
datarate: SF7
is_classb: 0
lati: null

mac: 004A770124070C06
appeui: 2C26C50124194000
last_update_time: 20230525151128
data: 485a5257534b4a68456dc0e0ca21a00000000000000000000000008a40000000000000000000000007716
reserver: null
data_type: 2
fcntdown: 11
fcntup: 11
gweui: 70b3d5fffe88b46f
rssi: -41
lsnr: 9.5
alti: null
lng: null
datarate: SF7
is_classb: 0
lati: null

mac: 004A7701240706DD
appeui: 2C26C50124194000
last_update_time: 20230525151128
data: 485a5257534b4a684500000000a21a00000000000000000000000008a40000000000000000000000001516
reserver: null
data_type: 2
fcntdown: 2
fcntup: 2
gweui: 70b3d5fffe88b46f
rssi: -32
lsnr: 10.2
alti: null
lng: null
datarate: SF7
is_classb: 0
lati: null