JsonObject JsonArray

本文介绍了如何使用Java创建和解析JSON对象。详细说明了通过JSONObject和JsonArray来构造JSON数据结构的方法,并给出了具体的代码实现。此外,还展示了如何从JSON字符串中提取数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、JsonObject:类似 Map ,以键值对的形式保存数据

2、JsonArray:Array,顾名思义,就是一个数组,数组里面的对象是JsonObject。

3、JsonObject  和 JsonArray 可以互相嵌套,JsonObject 里面可以含有 JsonArray,JsonArray 里面也可以含有JsonObject。

{
	"userName":Jamilyn
	"userId":20160808xxx
	"messages":{
					[
						{"message":"今天天气很好"
						 "date":"08-08 18:20"
						}
						{"message":"快下班啦"
						 "date":"08-08 18:30"
						}
					]
		   }
}


3、生成Json对象:

 public JSONObject createJson() throws JSONException{
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("userName","Jamilyn");
        jsonObject.put("userId","20160808xxxx");

        JSONArray jsonArray = new JSONArray();
        JSONObject object1 = new JSONObject();
        object1.put("message","今天天气很好");
        object1.put("date", "08-08 18:20");
        jsonArray.put(0,object1);

        JSONObject object2 = new JSONObject();
        object2.put("message","快下吧啦");
        object2.put("date", "08-08 18:30");
        jsonArray.put(1, object2);

        jsonObject.put("messages",jsonArray);
        return jsonObject;

    }

5、解析Json:

 public void parserJson(JSONObject object)throws JSONException{
        String userName = object.getString("userName");
        String userId = object.getString("userId");

        JSONArray array = object.getJSONArray("messages");

        for (int i=0;i<array.length();i++){
            JSONObject object1 = array.getJSONObject(i);
            String message = object1.getString("message");
            String date = object1.getString("date");
        }
    }


### Java Lombok `@Data` 注解与 JSON 处理 为了实现 Lombok 的 `@Data` 注解与 `JSONObject` 和 `JSONArray` 的兼容,在处理对象序列化和反序列化时可以采用 Jackson 或 Gson 等库。这些库能够很好地配合 Lombok 使用,简化开发流程。 #### 使用 Jackson 实现序列化和反序列化 Jackson 是一个流行的 JSON 解析器,适用于将 Java 对象转换为 JSON 字符串以及相反操作。当结合 Lombok 的 `@Data` 注解使用时,代码更加简洁明了[^1]。 ```java import com.fasterxml.jackson.databind.ObjectMapper; import lombok.Data; @Data public class User { private String username; private int age; } // 测试类 public class TestClass { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); // 创建实例并设置属性值 User user = new User(); user.setUsername("John Doe"); user.setAge(30); // 将对象转成JSON字符串 String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user); System.out.println(jsonString); // 将JSON字符串解析回对象 User parsedUser = mapper.readValue(jsonString, User.class); System.out.println(parsedUser.getUsername()); } } ``` 对于更复杂的情况,比如包含列表或其他集合类型的字段,则可以通过类似的逻辑来处理: ```java import java.util.List; import com.fasterxml.jackson.core.type.TypeReference; import lombok.Builder; import lombok.Data; @Data @Builder(toBuilder = true) class Stu implements Serializable { private Integer id; private List<String> courses; // 假设这里是一个课程列表 } // 测试部分保持不变... ``` 此示例展示了如何利用 Lombok 自动生成 getter/setter 方法,并通过 Jackson 完成复杂的嵌套结构的序列化和反序列化过程[^2]。 #### 关于无法正常获取到数据的问题分析 如果遇到即使有正确的 setter/getter 方法也无法成功读取或写入数据的情形,可能是因为某些框架(如 Spring Boot)内部机制影响所致。此时建议检查项目配置文件中关于 Bean 扫描路径、组件扫描范围等方面的设定;另外也要确认实体类上的注解是否正确无误[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值