json数组转list,json字符串转list
大家好,今天小编来为大家解答以下的问题,关于json数组转list,json字符串转list这个很多人还不知道,现在让我们一起来看看吧!
怎样用C#把JSON数据转换为list或数组
//导入这个命名空间
using System.Web.Script.Serialization;
//这个命名空间需要引用几个,System.Web.XXX,具体我也记不了是哪几个,
//你看到System.Web.xxx的都引用。之后自己去掉没报错就是不需要的。
//导入命名空间完后,你可以这样声明对象
JavaScriptSerializer js= new JavaScriptSerializer();
//然后调用Json数据转对象的方法
//strJson是Json字符串数据(这里需要JSON是数组数据的前提下)
List<string> list= js.Deserialize<List<string>>(strJson);
//这里主要说一下js.Deserialize<T>(string);//T(泛型)是需要转换成的对象(数组,List,OBJECT)
//string是Json字符串数据
//这个方法返回的是T类型对象。(定义什么返回什么)
怎么将数组转为json
要使用json来传输数据,必须将所承载的数据转换成json的格式。json的格式如下:
JSON建构于两种结构:
1.“名称/值”对的集合。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组(associative array)。
2.值的有序列表。在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
JSON具有以下这些形式:
1.对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。
例:{"name":"张三","age":20,"birthday":"1982-07-20"}
这是对象在json中的表示形式.即{"key1":"value1","key2":"value2",...}
2.数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
例:["张三","李四","王五"]
这是数组在json中的表示形式.即[value1,value2,value3,....]
3.值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
4.字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
字符串(string)与C或者Java的字符串非常相似。
5.数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。
注:你只要记住前两种形式就可以了。
注意:key一定要用引号,而value如果是字符串,也一定要用引号引起来。切记,有的系统中,只当双引号是有效的,而不认单引号。所以建议用双引号。
更多的格式内容请访问
以上说了json的表示形式,那么现在来看一下它的使用:
因为语言的不同,在action中对json的使用方式也不一样,但思路是一样的,那就是将json转换为对象或数组,我们这里只提及客户端的javascript中json的转换。你使用哪种语言,请参照本语言使用json的方式。
1.首先,在javascript中要获取前端页面中所有输入域的值,保存到数组或一个对象中。
2.将对象或数组转换成JSON格式。有一个js文件能让我们转换起来非常方便,就是prototype.js,导入这个文件后,使用(对象.toJSON())或(数组.toJSON()),这个对象或数组就被保存成为了JSON格式的数据
3.将这个JSON对象传入action中进行处理,然后返回。
4.如果返回的是一个json,那么各户端接收以后需要将json格式的数据转换为javascrip中的对象或数组。同样使用prototype.js,(json对象.evalJSON());好了,这样就转换成js中的对象或数组了。同样你也可以使用javascript中的eval函数进行转换。(eval(json对象)),这两种方式都可以效果是相同的,都是返回的javascript的对象或数组。你现在就可以在客户端的javascript中使用这个对象或数组了
注意:prototype.js与json.js可能会有冲突,建议只使用一种。当然在这里没有介绍json.js的使用,原因是prototype.js的功能已经十分强大,在使用prototype.js时,已经没有必要再使用json.js了
android 怎么看json数据格式
给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分情况下都是XML格式或者JSON格式。然后JSON相对XML来说解析相对方便一些,所以先说说JSON的解析。
JSON的基本数据格式有这几种:
1.一个JSON对象——JSONObject
{"name":"胡小威","age":20,"male":true}
2.一个JSON数组——JSONArray
[{"name":"胡小威","age":20,"male":true},{"name":"赵小亮","age":22,"male":false}]
3.复杂一点的JSONObject
{"name":"胡小威","age"=20,"male":true,"address":{"street":"岳麓山南","city":"长沙","country":"中国"}}
4.复杂一点的JSONArray
[
{"name":"胡小威","age"=20,"male":true,"address":{"street":"岳麓山南","city":"长沙","country":"中国"}},
{"name":"赵小亮","age"=22,"male":false,"address":{"street":"九州港","city":"珠海","country":"中国"}}
]
5.来个更复杂的,这是我从爱帮公交上扒取的数据
{"buses":{"bus":[{"last_foot_dist":"0","time":"37","segments":{"segment":[{"line_name":"立珊专线(中南大学学生公寓-长沙火车站)","foot_dist":"362","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);牛耳教育(南阳街口);韭菜园;曙光路口;长岛路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7535","start_stat":"岳麓山南"}]},"foot_dist":"362","dist":"7897"},{"last_foot_dist":"0","time":"41","segments":{"segment":[{"line_name":"旅1路(科教新村-长沙火车站)","foot_dist":"337","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);蔡锷中路口;韭菜园;乔庄;曙光路口;长岛路口;五一东村;车站路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7822","start_stat":"岳麓山南"}]},"foot_dist":"337","dist":"8159"}]}}
接下来是解析部分
一、直接解析
1.{"name":"胡小威","age":20,"male":true}
Java代码
public void parseJsonObject(String json){
try{
JSONObject jsonObject= new JSONObject(json);
String name= jsonObject.getString("name");
int age= jsonObject.getInt("age");
boolean male= jsonObject.getBoolean("male");
//接下来该干嘛干嘛
} catch(JSONException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2.[{"name":"胡小威","age":20,"male":true},{"name":"赵小亮","age":22,"male":false}]
Java代码
public void parseJSONArray(String json){
try{
JSONArray jsonArray= new JSONArray(json);
for(int i= 0; i< jsonArray.length(); i++){
jsonObject= jsonArray.getJSONObject(i);
String name= jsonObject.getString("name");
int age= jsonObject.getInt("age");
boolean male= jsonObject.getBoolean("male");
//接下来该干嘛干嘛
}
} catch(JSONException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3.{"name":"胡小威","age"=20,"male":true,"address":{"street":"岳麓山南","city":"长沙","country":"中国"}}
Java代码
public void parseJsonPerson(String json){
try{
JSONObject jsonObject= new JSONObject(json);
String name= jsonObject.getString("name");
int age= jsonObject.getInt("age");
boolean male= jsonObject.getBoolean("male");
JSONObject addressJSON= jsonObject.getJSONObject("address");
String street= addressJSON.getString("street");
String city= addressJSON.getString("city");
String country= addressJSON.getString("country");
Address address= new Address(street, city, country);
Person person= new Person(name, age, male, address);
} catch(JSONException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
4.
[
{"name":"胡小威","age"=20,"male":true,"address":{"street":"岳麓山南","city":"长沙","country":"中国"}},
{"name":"赵小亮","age"=22,"male":false,"address":{"street":"九州港","city":"珠海","country":"中国"}}
]
Java代码
public void parseJsonArrayPerson(String json){
List<Person> persons= new ArrayList<Person>();
try{
jsonArray= new JSONArray(json);
for(int i= 0; i< jsonArray.length(); i++){
jsonObject= jsonArray.getJSONObject(i);
String name= jsonObject.getString("name");
int age= jsonObject.getInt("age");
boolean male= jsonObject.getBoolean("male");
JSONObject addressJSON= jsonObject.getJSONObject("address");
String street= addressJSON.getString("street");
String city= addressJSON.getString("city");
String country= addressJSON.getString("country");
Address address= new Address(street, city, country);
Person person= new Person(name, age, male, address);
persons.add(person);
Log.v("juno", person.toString());
}
} catch(JSONException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.v("juno", persons.toString());
}
5.{"buses":{"bus":[{"last_foot_dist":"0","time":"37","segments":{"segment":[{"line_name":"立珊专线(中南大学学生公寓-长沙火车站)","foot_dist":"362","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);牛耳教育(南阳街口);韭菜园;曙光路口;长岛路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7535","start_stat":"岳麓山南"}]},"foot_dist":"362","dist":"7897"},{"last_foot_dist":"0","time":"41","segments":{"segment":[{"line_name":"旅1路(科教新村-长沙火车站)","foot_dist":"337","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);蔡锷中路口;韭菜园;乔庄;曙光路口;长岛路口;五一东村;车站路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7822","start_stat":"岳麓山南"}]},"foot_dist":"337","dist":"8159"}]}}
Java代码
public List<Salution> parseJSON(String str){
Log.d("返回的JSON数据:", str);
List<Salution> busList= new ArrayList<Salution>();
try{
JSONObject jsonObject= new JSONObject(str);
JSONObject busesJSON= jsonObject.getJSONObject("buses");
JSONArray busJSArray=busesJSON.getJSONArray("bus");
for(int i=0;i<busJSArray.length();i++){
JSONObject busJSObject= busJSArray.getJSONObject(i);
JSONObject segsJSObject=busJSObject.getJSONObject("segments");
JSONArray segJSArray=segsJSObject.getJSONArray("segment");
Salution st=new Salution();
for(int j=0;j<segJSArray.length();j++){
if(j==0){
JSONObject segJSObject= segJSArray.getJSONObject(j);
st.setLine_name1(segJSObject.getString("line_name"));
Log.d("line_name", segJSObject.getString("line_name"));
st.setStats1(segJSObject.getString("stats"));
st.setEnd_stat1(segJSObject.getString("end_stat"));
st.setStart_stat1(segJSObject.getString("start_stat"));
}
if(j==1){
JSONObject segJSObject= segJSArray.getJSONObject(j);
st.setLine_name2(segJSObject.getString("line_name"));
Log.d("line_name", segJSObject.getString("line_name"));
st.setStats2(segJSObject.getString("stats"));
st.setEnd_stat2(segJSObject.getString("end_stat"));
st.setStart_stat2(segJSObject.getString("start_stat"));
}
}
busList.add(st);
}
return busList;
} catch(JSONException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
这里我只是简单获取了几个我想要的数据。
二、使用JSON类库Gson来解析JSON
Gson是 Google提供的用来在 Java对象和 JSON数据之间进行映射的 Java类库。可以将一个 JSON字符串转成一个 Java对象,或者反过来。
首先,从 code.google.com/p/google-gson/downloads/list下载GsonAPI
Java代码
google-gson-1.7.1-release.zip
再把gson-1.7.jar copy到libs
可以使用两种方法解析
①、通过获取JsonReader对象解析JSON数据:
Java代码
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();
}
②、通过把JSON数据映射成一个对象,使用Gson对象的fromJson()方法获取一个对象数组进行操作
Java代码
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());
}
我一般是采用直接解析,添加类库神马的最讨厌了···
还有,抱怨一下,iteye的编辑弱爆了!!!
转载
好了,文章到此结束,希望可以帮助到大家。