JSONObject JSONArray

见红皮笔记

=====================================================================================================================================================================================================================================================================

 

一、
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时,也易于机器解析和生成。
二、JSON数据格式解析:
和XML一样,JSON也是基于存文本的数据格式。您可以用JSON传输一个简单的String、Number、Boolean,也可以传输一个数组或者一个复杂的Object对象。
例如:
1、用JSON表示一个简单String “abc”,其格式为:”abc”。除了字符“,\,/ 和一些控制符(\b,\n,\t等)需要编码外,其他Unicode字符可以直接输出。
2、用JSON表示一个数组对象,使用“[ ]“包含所有元素,每个元素用逗号分隔,元素可以使任意的value,例如,一下数组包含了一个String、Number、Boolean、和一个null:
[“abc”,123,false,null]。
3、Object对象在JSON中用“{ }“包含一系列无序的Key-Value键值对表示,实际上此处的Object相当于Java中的Map。注意Key只能用String表示。例如:一个Address对象包含如下Key-Value:{“city”:”beijing”,”street”:”chaoyang”,”postcode”:100025}。
三、JAVASCRIPT处理JSON数据
Function demo(){
var v={“name”:”SMITH”,”address”: {“city”:”beijing”,”street”:”chaoyang”,”postcode”:100025}};
document.write(v.name);
document.write(v.address.city);
}
四:JSON和XML的比较
XML和JSON都是用结构化方法来标记数据,下面来做一个简单的比较。
<?xml version=”1.0” encoding=”utf-8”?>
< country>
< name>中国</name>
< province>
< name>黑龙江</name>
< citys>
< city>哈尔滨</city>
< city>大庆</city>
< /citys>
< /province>
< /country>

用JSON表示如下:
{
name:”中国”,
province:[
{
Name:”黑龙江”,citys:{“哈尔滨”,”大庆”}
}
]
}
XML比JSON更有可读性。不过,我们读起来费解的语言,恰恰是适合机器阅读的。编写的手写难度来说,XML还是舒服一些,好读当然就好写。不过写出来的字符JSON就明显少很多。去掉空白制表以及换行的话,JSON就是有用数据,而XML却包含很多重复的标记字符。
五、下面列举两个对象:JSONArray和JSONObject
在写有关于JSON的程序时首先要加入六个JAR包:commons-beanutils-1.7.0.jar、commons-collections.jar、commons-lang-2.2.jar、ezmorph-1.0.4.jar、json-lib-2.1-jdk15.jar、xom-1.1d2.jar

(1)JSONArray
     例子:
        List list = new ArrayList();
                list.add("a");
                list.add("b");
                JSONArray jso = JSONArray.fromObject(list);
                System.out.println(list);
        输出的结果是:[“a”,”b”] 。

(2)JSONObject
     例子:
        Map map = new HashMap(); 
                map.put( "int", new Integer(1) );     
                map.put( "arr", new String[]{"a","b"} );     
                map.put( "func", "function(i){ return this.arr; }" );     
                JSONObject json = JSONObject.fromObject( map );     
                System.out.println( json );  
        输出的结果是:{"arr":["a","b"],"int":1,"func":function(i){ return this.arr; }}

(3)JSONObject to XML
     例子:
         JSONObject json = JSONObject.fromObject("{\"name\":\"json\",\"bool\":true,\"int\":1}");  
                   XMLSerializer xmlSerializer = new XMLSerializer();   
           String xml = xmlSerializer.write(json);   
System.out.println(xml);

      XML to JSONObject
       例子:
            String xmls = "<?xml version='1.0' encoding='UTF-8'?><o><int type='number'>1</int>" +        "<name type='string'>json</name></o>"; 
                    XMLSerializer xmlSerializer = new XMLSerializer();   
        JSON json = xmlSerializer.read(xmls); System.out.println( json.toString(2) ); 

六、下面列举AJAX和JSON的例子
    1、环境struts、hibernate、JSON、AJAX
    2、首先,加载struts和hibernate框架,然后再把JSON的JAR包放到lib下。
创建一个Action:
       Action的内容如下:

                    PrintWriter out = response.getWriter();
                 JSONObject obj = new JSONObject();
                 JSONArray js = new JSONArray();
                 //这里的数据封装是从数据库查询来的           
                  MesDao md = new MesDao();
                  List list = md.findMess();
                  for(int i=0;i<list.size();i++){
                        JSONObject objtemp = new JSONObject();
                        TMessage tm = (TMessage) list.get(i);
                               objtemp.put("id", tm.getId());
                        objtemp.put("name", tm.getName());
                        js.add(objtemp);
           }
                obj.put("js",js);
           out.print(obj.toString());
        然后,创建一个JSP页面:
        其内容如下:
        <script type="text/javascript"  src="prototype1.4.js"></script>
        <script type="text/javascript"  src="toolpro.js"></script>
        <script type="text/javascript">
          function demo(){
                new Ajax.Updater("content","test.do");           
          }
< /script>
< a href='javascript:getcomplex()'>获取数据</a>
< div id="content">
             正在获取内容...
< /div>
然后创建toolpro.js
toolpro.js的内容如下:
function getcomplex(){
var url = 'test.do';
            var ajax = new Ajax.Request(url,
            {method:'post',Complete:showcomplex});  
}
function showcomplex(dataResponse)
      {
var data = eval('(' + dataResponse.responseText + ')');
var str='';
for(var i=0;i<data.js.length;i++)
{
str+='<ul>';
str+='<li>'+data.js.id+'</li>';
str+='<li>'+data.js.name+'</li>';
str+='</ul>';
}
document.getElementById("content").innerHTML=str;
}              

### 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、付费专栏及课程。

余额充值