① java 中解析 XML 生成 Bean 實例,用什麼方式效率最高
用org.json以及谷歌提供gson來解析json數據的方式更好一些。
安卓下通常採用以下幾種方式解析json數據:
1、org.json包(已經集成到android.jar中了)
2、google提供的gson庫
3、阿里巴巴的fastjson庫
4、json-lib
以Google出品的Gson為例,具體步驟為:
1、首先,從 code.google.com/p/google-gson/downloads/list下載GsonAPI:
google-gson-1.7.1-release.zip 把gson-1.7.jar 到libs(項目根目錄新建一個libs文件夾)中。 可以使用以下兩種方法解析JSON數據,通過獲取JsonReader對象解析JSON數據。
代碼如下:
String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";
try{
JsonReader reader = new JsonReader(new StringReader(jsonData));
reader.beginArray();
while(reader.hasNext()){
reader.beginObject();
while(reader.hasNext()){
String tagName = reader.nextName();
if(tagName.equals("username")){
System.out.println(reader.nextString());
}
else if(tagName.equals("userId")){
System.out.println(reader.nextString());
}
}
reader.endObject();
}
reader.endArray();
}
catch(Exception e){
e.printStackTrace();
}
2、使用Gson對象獲取User對象數據進行相應的操作:
代碼如下:
Type listType = new TypeToken<LinkedList<User>>(){}.getType();
Gson gson = new Gson();
LinkedList<User> users = gson.fromJson(jsonData, listType);
for (Iterator iterator = users.iterator(); iterator.hasNext();) {
User user = (User) iterator.next();
System.out.println(user.getUsername());
System.out.println(user.getUserId());
}
3、如果要處理的JSON字元串只包含一個JSON對象,則可以直接使用fromJson獲取一個User對象:
代碼如下:
String jsonData = "{\"username\":\"arthinking\",\"userId\":001}";
Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);
System.out.println(user.getUsername());
System.out.println(user.getUserId());
② 請問我怎麼把一個xml 的文件轉化成 json 格式的
通過Java解析XML,生成JavaBean或者其它類型的java對象,然後使用GSON,將java對象轉化成json.
GSON是google開發的一個包,小巧而功能強大,可定製性也很強,推薦使用.
③ java用XStream把xml轉換成javabean的問題
xStream可以輕易的將Java對象和xml文檔相互轉換,而且可以修改某個特定的屬性和節點名稱,而且也支持json的轉換;它們都完美支持JSON,但是對xml的支持還不是很好。一定程度上限制了對Java對象的描述,不能讓xml完全體現到對Java對象的描述。這里將會介紹xStream對JSON、XML的完美支持。xStream不僅對XML的轉換非常友好,而且提供annotation註解,可以在JavaBean中完成對xml節點、屬性的描述。以及對JSON也支持,只需要提供相關的JSONDriver就可以完成轉換。
④ 如何將XML文檔轉換為JSON格式
你好,之所以使用JSON一般是為了跳過XML這個過程,使JAVA類型到客戶端的javascript類型可以不需要再解回析XML就直接生成.答
個人建議是通過Java解析XML,生成JavaBean或者其它類型的java對象,然後使用GSON,將java對象轉化成json.GSON是google開發的一個包
⑤ XML轉換成JavaBean
用Dom4j和SAX解析配置文件成java Bean對象
分類: java 2011-08-05 11:13 138人閱讀 評論(0) 收藏 舉報
[java] view plain
用Dom4j和SAX兩種方式將如下配置文件解析成java Bean對象。配置文件(config.xml)如下:<pre class="html" name="code"><?xml version="1.0" encoding="UTF-8"?>
<Beans>
<Bean className="Test" classComment="測試類">
<Field name="name" type="String" comment="名字" />
<Field name="sex" type="Integer" comment="性別" />
</Bean>
<Bean className="Test1" classComment="測試類1">
<Field name="name1" type="String" comment="名字1" />
<Field name="sex1" type="Integer" comment="性別1" />
</Bean>
</Beans>
[java] view plain
首先定義java的三個類Beans、Bean、Field 來承載配置文件的節點,類定義如下:
[java] view plain
/**
* 總對象
* @author
*/
public class Beans {
private ArrayList<Bean> listBean = new ArrayList<Bean>();;
public ArrayList<Bean> getListBean() {
return listBean;
}
public void setListBean(ArrayList<Bean> listBean) {
this.listBean = listBean;
}
}
/**
* 一個Class Bean
* @author
*
*/
public class Bean {
private String className;//類名
private String classComment;//類注釋
private ArrayList<Field> listField = new ArrayList<Field>();
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getClassComment() {
return classComment;
}
public void setClassComment(String classComment) {
this.classComment = classComment;
}
public ArrayList<Field> getListField() {
return listField;
}
public void setListField(ArrayList<Field> listField) {
this.listField = listField;
}
}
/**
* Bean 中的屬性對象
* @author
*
*/
public class Field {
//類型
private String type;
//欄位名字
private String name;
//欄位注釋
private String comment;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
}
第一種方式:通過Dom4j的方式解析xml文件:
[java] view plain
[java] view plain
/**
* 將xml格式的字元串轉成Beans對象
* @param xml
* @return
*/
public static Beans parseXml(String xml)
{
Beans returnObj = new Beans();
Document doc = null;
try{
// doc = DocumentHelper.parseText(xml); 原版轉的是用的這種方式獲取document對象,但是測試出錯。自己換成了下面方式獲取document對象就對了。
SAXReader reader = new SAXReader();
doc = reader.read(new File(xml));
Element root = doc.getRootElement();
//obj list
List list_el = root.elements();
if(list_el !=null && list_el.size()>0)
{
for(int i =0;i<list_el.size();i++)
{
Element obj_el = (Element) list_el.get(i);
//解析obj 節點
Bean obj = parseObj(obj_el);
returnObj.getListBean().add(obj);
}
}
}catch(Exception e){
e.printStackTrace();
}
return returnObj;
}
/**
* 解析Bean節點
* @param obj_el
* @return
*/
private static Bean parseObj(Element obj_el)
{
Bean obj = new Bean();
obj.setClassName(obj_el.attributeValue("className"));
obj.setClassComment(obj_el.attributeValue("classComment"));
//獲取field 列表
List list_field = obj_el.elements();
if(list_field != null && list_field.size() > 0)
{
for(int i = 0;i<list_field.size();i++)
{
Element field_el = (Element)list_field.get(i);
//解析field節點
Field field = parseField(field_el);
obj.getListField().add(field);
}
}
return obj;
}
/**
* 解析Field屬性
* @param field_el
* @return
*/
private static Field parseField(Element field_el)
{
Field field = new Field();
List list_attr = field_el.attributes();
if(list_attr != null && list_attr.size() > 0)
{
for(int i=0;i<list_attr.size();i++)
{
Attribute field_attr = (Attribute)list_attr.get(i);
String key = field_attr.getName();
String value = field_attr.getText();
if(key.equals("name"))
{
field.setName(value);
}
else if(key.equals("type"))
{
field.setType(value);
}
else if(key.equals("comment"))
{
field.setComment(value);
}
}
}
return field;
}
⑥ 如何根據xml和schema文件生成java類(用程序實現)!
JAXB提供了可以從schema生成java類,下面簡要介紹一下生成的步驟:
1:下載jaxb包 jaxb 2_1_9.zip ,在本博客中可以下載得到。解壓後得到四個目錄,包含bin、lib 、docs、example
2:在"cmd"里進入到bin目錄,如C:/>cd C:/jaxb2.1.9/bin 回車
3:輸入xjc c:/students.xsd -d c:/src -p com.entity 回車
註:-d 說明要生成的java類存放目錄
-p 為生成java類指定的包名
students.xsd 為自己定義的Schema