中易网

从API接口获取的json数据怎么存到对象的List集合中

答案:1  悬赏:50  
解决时间 2021-11-11 14:15
{"tae_items_list_response":{"items":{"x_item":[{"istk":true,"mall":false,"open_auction_iid":"AAF9k_goACKjsg_jjor5pFx2","open_id":524824682029,"open_iid":"AAF9k_goACKjsg_jjor5pFx2","title":"2015秋冬新款韩版女装印花小鹿图打底裙蕾丝拼接中长款修身连衣裙","tk_rate":"500"}]},"request_id":"z29ydtqpc8zj"}}

获取的json数据怎么存储到List集合中呢
最佳答案
1. 简单的手动放置 键值对 到JSONObject,然后在put到JSONArray对象里
List<Article> al = articleMng.find(f);
System.out.println(al.size());
HttpServletResponse hsr = ServletActionContext.getResponse();
if(null == al){
return ;
}
for(Article a : al){
System.out.println(a.getId()+a.getDescription()+a.getTitle());
}
JSONArray json = new JSONArray();
for(Article a : al){
JSONObject jo = new JSONObject();
jo.put("id", a.getId());
jo.put("title", a.getTitle());
jo.put("desc", a.getDescription());
json.put(jo);
}
try {
System.out.println(json.toString());
hsr.setCharacterEncoding("UTF-8");
hsr.getWriter().write(json.toString());
} catch (IOException e) {
e.printStackTrace();
}
复制代码
上述代码JSONArray是引入的org.json.JSONArray包

而用net.sf.json包下JSONArray的静态方法:fromObject(list) 这是网上大多是都是直接用此方法快捷转换JSON,但是对于Hibernate级联操作关联的对象,这个方法就会报错,如果将映射文件中的级联配置去掉就行了。

另外对于list的要求就是其中的元素是字符串或对象,否则JSON不知道你想要的是什么数据。

<many-to-one name="cmsent" column="comment_tid" class="com.fcms.cms.entity.CmsComment"
not-null="false" cascade="delete">
但是级联操作毕竟还是得存在,否则以后数据冗余、多余。

解决方法就是:JSONArray subMsgs = JSONArray.fromObject(object, config);

JsonConfig config = new JsonConfig();
config.setJsonPropertyFilter(new PropertyFilter() {
public boolean apply(Object arg0, String arg1, Object arg2) {
if (arg1.equals("article") ||arg1.equals("fans")) {
return true;
} else {
return false;
}
}
});
复制代码
说明:提供了一个过滤作用,如果遇到关联的对象时他会自动过滤掉,不去执行关联关联所关联的对象。这里我贴出我hibernate中的配置关系映射的代码帮助理解:

<!-- 配置话题和团体之间的关系 -->
<many-to-one name="article" class="com.fcms.nubb.article" column="article_id"/>

<!-- 配置主题帖与回复的帖子之间的关系 -->
<set name="subMessages" table="sub_message" inverse="true" cascade="all" lazy="false" order-by="date asc">
<key column="theme_id" />
<one-to-many class="bbs.po.SubMessage" />
</set>

总结:
1. JSONArray subMsgs = JSONArray.fromObject(subMessages, config);其中config是可选的,当出现上面的情况是可以配置config参数,如果没有上面的那种需求就可以直接使用fromObject(obj)方法,它转换出来的就是标准的json对象格式的数据,如下:

{["attr", "content", ...}, ...]}

2. JSONObject jTmsg = JSONObject.fromObject(themeMessage, config);这是专门用来解析标准的pojo,或者map对象的,pojo对象的格式就不用说了,map的形式是这样的{"str", "str"}。

package com.nubb.bean;

import java.io.Serializable;

public class Person implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private int age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}

}

package com.nubb.test;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;
import com.nubb.bean.Person;

public class JSONSerializer {
private static final String DEFAULT_CHARSET_NAME = "UTF-8";

public static <T> String serialize(T object) {
return JSON.toJSONString(object);
}

public static <T> T deserialize(String string, Class<T> clz) {
return JSON.parseObject(string, clz);
}

public static <T> T load(Path path, Class<T> clz) throws IOException {
return deserialize(
new String(Files.readAllBytes(path), DEFAULT_CHARSET_NAME), clz);
}

public static <T> void save(Path path, T object) throws IOException {
if (Files.notExists(path.getParent())) {
Files.createDirectories(path.getParent());
}
Files.write(path,
serialize(object).getBytes(DEFAULT_CHARSET_NAME),
StandardOpenOption.WRITE,
StandardOpenOption.CREATE,
StandardOpenOption.TRUNCATE_EXISTING);
}

public static void main(String[] args) {
Person person1 = new Person();
person1.setAddress("address");
person1.setAge(11);
person1.setName("amao");

Person person2 = new Person();
person2.setAddress("address");
person2.setAge(11);
person2.setName("amao");

List<Person> lp = new ArrayList<Person>();
lp.add(person1);
lp.add(person2);
System.out.println(serialize(lp));
}

}

输出:

[{"address":"address","age":11,"name":"amao"},{"address":"address","age":11,"name":"amao"}]
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
手掌发红是什么原因引起的?
隧道防水堵漏注浆泵哪家做的比较专业?
钧瓷酒瓶有什么工艺特色?
脸部肌肉疼,吃饭讲话都疼,不知道为什么?都
被仓鼠咬了需要打狂犬疫苗吗
安康市水利局地址有知道的么?有点事想过去!
如何装一室一厅,求效果图
万达布尔诺网咖地址有知道的么?有点事想过去
梦见墙上的常青藤是什么意思?好不好呢?
有没有人知道奉贤南桥人民南路156号社保中心
非比他人可以用什么词语代替?
东莞常平火车站到塘厦镇怎么走
飓风马友俱乐部地址在哪,我要去那里办事
有没有哪首歌的歌词里有勇敢的小羊?
怎么取消短号家庭网里的副号
推荐资讯
要考上雅礼初中需要多少分?
湖北桂花树苗木怎么卖的?
古南居委会办公地址在什么地方,我要处理点事
起名字姓伊男孩要好听顺口
巴西龟晒太阳多久合适
请问汽车美容店,有了高压清洗机,还需要空压
衢州装修公司总体说来哪家比较好?
泰国试管 婴儿对身体有危害吗?
交换机路由器及其配置的知识哪位懂?
蒸馒头或烤面包时,为什么不加入淀粉让馒头或
酒糟鼻鼻头太大怎么变小
人困马乏的意思?成语怎么解释?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?