json中JsonArray很易懂的代码

1.从Object到String
 要先用Object对象构造一个JSONObject或者JSONArray对象,然后调用它的toString()方法即可

(1)示例一

1 Book book=new Book();
2 book.setName("Java");
3 book.setPrice(52.3f);
4 JSONObject object=JSONObject.fromObject(book);
5 System.out.println(object.toString());

(2)示例二

复制代码
 1         Book book=new Book();
 2         book.setName("Java");
 3         book.setPrice(52.3f);
 4         
 5         Book book2=new Book();
 6         book2.setName("C");
 7         book2.setPrice(42.3f);
 8         List list=new ArrayList();
 9         list.add(book);
10         list.add(book2);
11         JSONArray arry=JSONArray.fromObject(list);
12         System.out.println(arry.toString());
13 //结果如下:
14 [{"name":"Java","price":52.3},{"name":"C","price":42.3}]
复制代码

2.从String到Object
 要先用String对象构造一个JSONObject或者JSONArray对象
(1)示例一 

1 String json="{name:'Java',price:52.3}";    
2 JSONObject object=JSONObject.fromObject(json);
3 System.out.println(object.get("name")+" "+object.get("price"));

(2)示例二

复制代码
1 String json="[{name:'Java',price:52.3},{name:'C',price:42.3}]";
2 JSONArray array=JSONArray.fromObject(json);
3 for(int i=0;i<array.size();i++){
4     Map o=(Map)array.get(i);
5     System.out.println(o.get("name")+" "+o.get("price"));
6 }
复制代码

3.从String到Bean

(1)单个Bean对象

1         String json="{name:'Java',price:52.3}";
2         JSONObject object=JSONObject.fromObject(json);
3         Product product=(Product)JSONObject.toBean(object,Product.class);
4         System.out.println(product.getName()+" "+product.getPrice());

(2).Bean的数组

复制代码
1         String json="[{name:'Java',price:52.3},{name:'C',price:42.3}]";
2         JSONArray array=JSONArray.fromObject(json);
3         Product[] products=(Product[]) JSONArray.toArray(array,Product.class);
4         for(Product p:products){
5             System.out.println(p.getName()+" "+p.getPrice());
6         }
复制代码

自定义封装JSON操作的类

复制代码
 1 package com.util;
 2 
 3 import java.util.List;
 4 import java.util.Map;
 5 
 6 import net.sf.json.JSONArray;
 7 import net.sf.json.JSONObject;
 8 
 9 public class JsonHelper {
10     //从普通的Bean转换为字符串
11     public static String getJson(Object o){
12         JSONObject jo=JSONObject.fromObject(o);
13         return jo.toString();
14     }
15     //从Java的列表转换为字符串
16     public static String getJson(List list){
17         JSONArray ja=JSONArray.fromObject(list);
18         return ja.toString();
19     }
20     //从Java对象数组转换为字符串
21     public static String getJson(Object[] arry){
22         JSONArray ja=JSONArray.fromObject(arry);
23         return ja.toString();
24     }
25     //从json格式的字符串转换为Map对象
26     public static Map getObject(String s){
27         return     JSONObject.fromObject(s);
28     }
29     //从json格式的字符串转换为List数组
30     public static List getArray(String s){
31         return JSONArray.fromObject(s);
32     }
33     //从json格式的字符串转换为某个Bean
34     public static Object getObject(String s,Class cls){
35         JSONObject jo=JSONObject.fromObject(s);
36         return JSONObject.toBean(jo, cls);
37     }
38     //从json格式的字符串转换为某类对象的数组
39     public static Object getArray(String s,Class cls){
40         JSONArray ja=JSONArray.fromObject(s);
41         return JSONArray.toArray(ja, cls);
42     }
43 }
<think> 我们需要将原代码中使用com.alibaba.fastjson.JSONArray替换为org.json.JSONArray。注意两个库的API有所不同,主要区别在于: 1. 创建JSONArray:org.json.JSONArray的构造方法可直接传入字符串,而fastjson是调用JSONArray.parseArray。 2. 获取元素:org.json.JSONArray使用getJSONObject(index)获取JSONObject,而fastjson使用getJSONObject(index)或直接转换为JSONObject。 3. 遍历方式:org.json.JSONArray没有直接转换为List<JSONObject>的方法,需要循环获取。 具体修改点: 原代码中使用了com.alibaba.fastjson.JSONArrayJSONObject,现在需要改为使用org.json.JSONArray和org.json.JSONObject。 需要修改的方法:searchContent 原代码片段: String json = OkHttp.string(url, getHeader()); JSONArray objects = JSONArray.parseArray(json); for (int j = 0; j < objects.size(); j++) { JSONObject vod = (JSONObject) objects.get(j); ... } 改为org.json.JSONArray后: JSONArray objects = new JSONArray(json); for (int j = 0; j < objects.length(); j++) { JSONObject vod = objects.getJSONObject(j); ... } 同时注意:org.json.JSONObject获取字符串的方法为getString,与fastjson一致,所以可以直接替换。 另外,其他方法中是否使用了fastjson?目前从代码中看只有searchContent使用了。所以主要修改这个方法。 但是,我们还要注意,原代码中可能在其他地方也使用了fastjson,但根据提供的代码,只有searchContent方法使用了。所以只修改这个方法即可。 修改后的searchContent方法代码如下: </think> 以下是使用 `org.json.JSONArray` 替换原有 FastJSON 实现的代码修改方案。主要修改集中在 `searchContent` 方法,使其兼容 `org.json` 库的 API: ```java package com.github.catvod.spider; // 其他导入保持不变... import org.json.JSONArray; import org.json.JSONObject; // 替换FastJSONJSONObject public class CeChi extends Spider { // ... 其他代码保持不变 ... @Override public String searchContent(String key, boolean quick) throws Exception { String url = searchUrl + URLEncoder.encode(key); String json = OkHttp.string(url, getHeader()); // 使用org.json.JSONArray解析 JSONArray objects = new JSONArray(json); List<Vod> list = new ArrayList<>(); for (int j = 0; j < objects.length(); j++) { JSONObject vod = objects.getJSONObject(j); // 使用getJSONObject方法 String vid = siteUrl + vod.getString("url"); String name = vod.getString("title"); String pic = vod.getString("thumb"); String remark = vod.getString("area"); list.add(new Vod(vid, name, pic, remark)); } return Result.string(list); } // ... 其他方法保持不变 ... } ``` ### 关键修改说明: 1. **导入包替换**: ```java import org.json.JSONArray; import org.json.JSONObject; // 替换FastJSON ``` 2. **JSON解析方式变更**: ```java // 原FastJSON方式 // JSONArray objects = JSONArray.parseArray(json); // org.json方式 JSONArray objects = new JSONArray(json); ``` 3. **元素获取方式**: ```java // 原FastJSON方式 // JSONObject vod = (JSONObject) objects.get(j); // org.json方式 JSONObject vod = objects.getJSONObject(j); ``` 4. **数据读取一致性**: ```java // org.json的getString方法保持与FastJSON相同的API vod.getString("url"); vod.getString("title"); ``` ### 两种JSON库的主要差异对比: | 特性 | FastJSON | org.json | |---------------------|------------------------------|------------------------------| | JSON数组解析 | `JSONArray.parseArray(json)` | `new JSONArray(json)` | | 获取JSON对象 | `(JSONObject) array.get(i)` | `array.getJSONObject(i)` | | 空值处理 | 自动转换空字符串 | 可能抛出JSONException | | 性能 | 较高(尤其序列化) | 中等 | | Android兼容性 | 需要额外依赖 | Android系统内置支持 | ### 注意事项: 1. **异常处理**: ```java try { JSONArray objects = new JSONArray(json); } catch (JSONException e) { // 处理非法JSON格式 } ``` 2. **空值安全**: ```java // 建议增加空值检查 String pic = vod.optString("thumb", ""); // 使用optString避免异常 ``` 3. **依赖管理**: 在 `build.gradle` 中添加依赖(如未内置): ```gradle implementation 'org.json:json:20231013' ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值