❶ 如何將json字元串包含多個list集合嵌套加到實體對象中
用fastjson來解析,其有個工具類JSON可以直接把字元串解析為JSONObject,如果你有對應的java類,還可以直接解析為Java對象用fastjson來解析,其有個工具類JSON可以直接把字元串解析為JSONObject,如果你有對應的java類,還可以直接解析為Java對象用fastjson來解析,其有個工具類JSON可以直接把字元串解析為JSONObject,如果你有對應的java類,還可以直接解析為Java對象
❷ 怎麼用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"}]
❸ 怎麼把list集合轉換成json
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>
❹ json多層集合嵌套解析求助
首先樓上說的部分是對的。那麼我先假設你已經獲得了這個字元串,將之定義為jsonString.
JSONObject jsonObject = new JSONObject(jsonString);
然後,根據嵌套的種類,可以確定下一步如何取值。根據你的情況來看。應該是:
String user_get_response = jsonObject.getString("user_get_response");
JSONObject user_get_response_obj = new JSONObject(user_get_response);
這是針對第一層嵌套的。
一層一層的取下去就好。如果是數組類型的,就用JSONArray來接收。
JSONArray jsonArray = new JSONArray(jsonObject.getString("xxx"));
總之就是由外到內去解析就好
❺ java json取集合某個元素
首先你的這個json串就有問題,修改下才能解析,解析方法如下
JSONObject log=jsonObject.getJSONObject("第一級Object");
JSONArray jsonArray = log.getJSONArray("Object中的array");
JSONObject pages = jsonArray.getJSONObject(0); //從jsonArray中解析第一個Object
JSONObject pageTimings=pages.getJSONObject("繼續解析object");
String onContentLoad=pageTimings.getString("onContentLoad"); //得到想要的值
把{}大括弧擴起來的看成是object,如果有名字就根據名字來解析,如果沒名字就根據序號來解析,上面的代碼兩種情況均有涉及,請注意參考與更改變數名。[]擴起來的看成數組,用getArray解析,同樣可以用名字或序號解析
❻ 如何將json數據轉化為一個類的集合
您好
(。這個list集合里有2900個對象,每個對象對應一個實體類,裡面有19個屬性。)
這最後一句話看出,你現在的情緒已經 崩潰了!!
不管數據在多,它和三條數據的存在 是一個道理 ,你用的是循環 多少數據 又有什麼關系。
不知道你現在是 取不到這個list ,還是不知道應該怎麼把這個list 放到 struts2的iterator 裡面
❼ js怎樣取出json對象集合的前幾條記錄,或者說第n到第m條記錄,然後轉化為另一個json對象集合
直接當數組一樣操作就行了啊
如果用jquery的話,有現成的過濾數組的函數
❽ 如何從文件中讀取JSON使用JSON凈C 集合.問題,怎麼解決
用C語言獲取JSON中的數據的方法是使用 CJSON。
以下簡單介紹用CJSON的思路及實現:
❾ Resconfig.json什麼意思
JSONSerializer的toJSON方法可以把參數指定的對象轉換成一個JSON介面的對象,如果這個對象是一個String對象,那麼這個方法還會校驗這個String對象是否是一個合法的JSON字元串(即是否符合JavaScript的語法)。對於一般JavaBean(必須是標準的具有setter\getter的JavaBean)的轉換就是按照屬性值對的方式生成JS對象,預設的情況下Map會轉換成對象,而List和數組會轉換為數組。
JSONSerializer的toJava方法可以把JSON介面的對象轉換為JavaBean對象,預設情況下,JSON介面的對象會被轉換為net.sf.ezmorph.bean.MorphDynaBean對象,所有基本類型(基本類型包裝類)、數組和String類型的屬性都會被准確的裝換,而其他類型(如Map等)都會被預設的轉換為net.sf.ezmorph.bean.MorphDynaBean對象。
以上是使用JSONSerializer的預設轉換函數(一個參數)進行轉換的結果,如果使用兩個參數的轉換函數(第二個參數為JsonConfig對象),則會按照JsonConfig的配置進行轉換。toJSON轉換時的配置:
setJsonPropertyFilter屬性過濾,用於處理那些屬性被過濾掉而不被轉化換為JSON,嵌套引用的Bean的屬性也可以被過濾。如下:
/* 使用屬性過濾器 */
myBeanJc.setJsonPropertyFilter(new PropertyFilter() {
@Override
public boolean apply(Object o, String n, Object v) {
if (o instanceof MyBean && n.equals("beanMap")) {
MyBean mb = (MyBean) o;
if (mb.getBeanMap().keySet().isEmpty())
return true;
} else if (o instanceof MyInnerBean && n.equals("attrMap")) {
Map<String, String> m = (Map<String, String>) v;
if (m.keySet().isEmpty())
return true;
} else
;
return false;
}
});
這個例子使用了匿名類的方式實現了一個自定義的屬性過濾器,其實就是覆蓋apply方法,這個方法的返回值決定是否把此屬性過濾掉(true表示過濾掉此屬性而不轉化到JSON中)。json-lib本身提供一些實現了PropertyFilter的屬性過濾器類供我們使用,如AndPropertyFilter, CompositePropertyFilter, FalsePropertyFilter, MappingPropertyFilter, NotPropertyFilter, OrPropertyFilter, TruePropertyFilter等,有興趣的話可以逐個試驗。
registerJsonBeanProcessor注冊JsonBeanProcessor,使用JsonBeanProcessor處理bean對象到JSON介面對象的轉換,它給我們提供了自定義的bean到JSON的轉換的介面,通過注冊自定義的JsonBeanProcessor我們可以按照自己的想法把bean轉化成我們想要的樣子。如下:
/* 使用JsonBeanProcessor處理bean對象到json對象的轉換 */
myBeanJc.registerJsonBeanProcessor(MyInnerBean.class,
new JsonBeanProcessor() {
@Override
public JSONObject processBean(Object o, JsonConfig jc) {
return JSONObject
.fromObject("{title : 'I am an inner bean!'}");
}
});
這個例子就給MyInnerBean注冊了一個自定義的JsonBeanProcessor,使用匿名類的方式實現了processBean方法,processBean方法返回的JSON對象就是在進行bean到JSON轉化時MyInnerBean對象轉化成的JSON對象。
setJsonBeanProcessorMatcher可以設置用於匹配JsonBeanProcessor的自定義的匹配器JsonBeanProcessorMatcher,通過實現JsonBeanProcessorMatcher的getMatch方法(這個方法有兩個參數,第一個是需要匹配的對象的Class對象,第二個參數是所有注冊了JsonBeanProcessor的Class對象的集合),返回一個Calss對象,轉換器會用以返回的Class對象注冊的JsonBeanProcessor處理這個類的轉換。如下:
/* 設置處理過程的注冊類匹配器 */
myBeanJc
.setJsonBeanProcessorMatcher(new JsonBeanProcessorMatcher() {
@Override
public Object getMatch(Class c, Set s) {
if (c.equals(MyInnerBean.class))
return innerClzz.class;
return c;
}
});
這個例子使用匿名類實現了一個自定義的JsonBeanProcessorMatcher,覆蓋了getMatch方法,它表示在bean到JSON的轉化過程中,如果我們要處理的類是MyInnerBean類,則返回innerClzz類,這時就會使用innerClzz注冊的JsonBeanProcessor來處理這個MyInnerBean,如果我們沒有為innerClzz注冊JsonBeanProcessor,則使用預設的轉化過程處理(屬性值對的方式)。
registerJsonValueProcessor注冊JsonValueProcessor,使用JsonValueProcessor處理Bean對象的屬性值的轉換,這里是為指定的數據類型注冊JsonValueProcessor。如下:
/* 使用JsonValueProcessor處理Bean對象的屬性值的轉換 */
myBeanJc.registerJsonValueProcessor(Double.class,
new JsonValueProcessor() {
@Override
public Object processArrayValue(Object arg0,
JsonConfig arg1) {
return null;
}
@Override
public Object processObjectValue(String k, Object v,
JsonConfig arg2) {
if (k.equals("dblVal"))
return Double.valueOf(v.toString())
.doubleValue()
* 100 + "%";
else
return v;
}
});
這個例子就是為雙精度浮點型注冊了一個JsonValueProcessor,需要我們覆蓋兩個方法,從名稱就能明白它們是分別處理數組和對象中的指定數據類型的方法。在這里我們把屬性dblVal的雙精度浮點值轉化為表示百分比的字元串,對於其他的雙精度浮點值不做處理。
注冊處理過程的方法都有其對應的反注冊(unregisterXxProcessor)方法,同時還提供了查找這些處理過程的方法(findXxProcessor)。
setExcludes設置不作轉換的屬性名稱,getExcludes可以返回設置的屬性名稱字元串數組,而getMergedExcludes可以返回所有不做轉換的屬性集合,包括setExcludes設置的屬性名稱。
setJavaIdentifierTransformer設置使用何種Java標識符的轉換器,沒太看懂,JavaIdentifierTransformer倒是挺好理解,可是這個轉換功能如何使用,在什麼時候使用呢?
setArrayMode設置數組的轉換模式,也不會用。
setRootClass設置根對象目標類,也就是從JSON介面對象轉換為bean時得到的對象的Java類,如果不設置的話,就轉換為MorphDynaBean。
setNewBeanInstanceStrategy用於設置對象實例化時使用的策略,預設的是使用Class的newInstance方法。從JSON介面對象轉換成JavaBean對象時首先應用該策略,然後才會用JSON介面對象的內容為實例賦值。如下:
/* 設置對象實例化策略 */
myBeanJc.setNewBeanInstanceStrategy(new NewBeanInstanceStrategy() {
@Override
public Object newInstance(Class c, JSONObject jo)
throws InstantiationException, IllegalAccessException {
Object o;
if (c.equals(MyInnerBean.class)) {
String t = "Recovered " + jo.get("title");
jo.put("title", t);
o = new MyInnerBean();
}else
o = c.newInstance();
return o;
}
});
這個例子中, 使用匿名類的方式覆蓋newInstance方法,如果是MyInnerBean類則使用無參構造函數實例化對象,其他情況下使用預設的實例化方式。因為從JSON介面對象轉換成JavaBean對象時首先應用該策略,然後才會用JSON介面對象的內容為實例賦值,所以在這里為實例化對象賦值是沒有意義的,如果想改變最後的bean的屬性值,可以通過修改JSON對象的屬性值來實現。
setClassMap應該是用於JSON和XML轉換的,有待進一步研究。
此外還有其他相對簡單的轉換過程配置選項的功能,比較容易理解和使用,類似於開關量。如:disableEventTriggering() ,enableEventTriggering()等等。
❿ struts2 json plugin includeProperties怎麼過濾Set集合
includeProperties 是包括,可以使用 excludeProperties 排除。。。。。。。。。
參考
@Result(name = Action.SUCCESS, type = "json", params = {
"excludeProperties","pageList\\.\\list[\\d+\\]\\.tbGrpInfo\\.(tbGrpEmps.*|tbGrpSets.*|tbGrpDepts.*){1}",
//過濾的值(我用的是hibernate,這里是過濾集合中tbGrpInfo這個對象,但是tbGrpInfo個對象包含了
tbGrpEmps,tbGrpSets,tbGrpDepts對象,因此都需要過濾,{1}這個表示只要有其中一個就過濾掉)
"includeProperties", "success,msg,pageList.*" //返回的值
}),