A. C#怎麼從http上返回jsON數據並讀取
我之前做過網路和桌面應用的數據對接,你看看
/*
1、對象集合
*/
[DataContract]
publicclassItems
{
[DataMember]
publicList<ddd>ddd{get;set;}
publicItems()
{
ddd=newList<ddd>();
}
//把字元串轉換為對象
publicstaticItemsFormJson(stringjson)
{
try
{
System.Runtime.Serialization.Json.DataContractJsonSerializera=newSystem.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(Items));
using(MemoryStreamstream=newMemoryStream(Encoding.Unicode.GetBytes(json)))
{
return(Items)a.ReadObject(stream);
}
}
catch(Exception)
{
returnnull;
}
}
}
/*
簡單的對象
*/
[DataContract]
publicclassddd
{
[DataMember]
publicintcid{get;set;}
[DataMember]
publicintpid{get;set;}
[DataMember]
publicintoid{get;set;}
[DataMember]
publicstringview_type{get;set;}
[DataMember]
publicstringstatus{get;set;}
[DataMember]
publicstringname{get;set;}
[DataMember]
publicstringeng_name{get;set;}
[DataMember]
publicstringctpl{get;set;}
[DataMember]
publicstringurl{get;set;}
}
/*
2、從HTTP請求中得到數據
*/
HttpWebRequestrequest=(HttpWebRequest)HttpWebRequest.Create("http://www.bursonchurch.net//index.php?Interface-index-keyt-123-act-catelist.html");
request.Timeout=5000;
request.Method="GET";
HttpWebResponseresponse=(HttpWebResponse)request.GetResponse();
Console.WriteLine("內容類型:"+response.ContentType);
Console.WriteLine("內容長度:"+response.ContentLength);
Console.WriteLine("伺服器名:"+response.Server);
Console.WriteLine("資源的URI:"+response.ResponseUri);
Console.WriteLine("HTTP協議版本:"+response.ProtocolVersion);
Console.WriteLine("相應狀態:"+response.StatusCode);
Console.WriteLine("相應方法:"+response.Method);
//頭信息
for(inti=0;i<response.Headers.Count;++i)
{
Console.WriteLine(" HeaderName:{0},----------Value:{1}",response.Headers.Keys[i],response.Headers[i]);
}
StreamReadersr=newStreamReader(response.GetResponseStream());
stringjsonstr=sr.ReadToEnd();
//例子:假設得到的json數據下面序列化為對象
stringtest="{"ddd":[{"cid":"1","pid":"0","oid":"0","view_type":"0","status":"1","name":"西科推薦","eng_name":"","ctpl":"","ctitle":"","ckeywords":"","cdescription":"","url":"http:\/\/www.bursonchurch.net\/index.php?Cate-index-cid-1.html"},{"cid":"2","pid":"0","oid":"2","view_type":"0","status":"1","name":"校園活動","eng_name":"","ctpl":"","ctitle":"","ckeywords":"","cdescription":"","url":"http:\/\/www.bursonchurch.net\/index.php?Cate-index-cid-2.html"},{"cid":"3","pid":"0","oid":"2","view_type":"0","status":"1","name":"帥哥","eng_name":"","ctpl":"","ctitle":"","ckeywords":"動物世界keword","cdescription":"動物世界s","url":"http:\/\/www.bursonchurch.net\/index.php?Cate-index-cid-3.html"},{"cid":"4","pid":"0","oid":"4","view_type":"1","status":"1","name":"靜物","eng_name":"","ctpl":"","ctitle":"","ckeywords":"","cdescription":"","url":"http:\/\/www.bursonchurch.net\/index.php?Cate-index-cid-4.html"},{"cid":"5","pid":"0","oid":"5","view_type":"1","status":"1","name":"美女","eng_name":"","ctpl":"","ctitle":"","ckeywords":"","cdescription":"","url":"http:\/\/www.bursonchurch.net\/index.php?Cate-index-cid-5.html"}]}";
//第一種轉
javaScriptSerializerj=newJavaScriptSerializer();
Itemsii=newItems();
ii=j.Deserialize<Items>(jsonstr);
//第二種也行
Itemsit=Items.FormJson(jsonstr);
response.Close();
Console.ReadKey();
B. c#解析JSON的幾種辦法
對比
C. 在 java web開發中怎麼使用json
一、JSON建構有兩種結構:
json簡單說就是javascript中的對象和數組,所以這兩種結構就是對象和數組2種結構,通過這兩種結構可以表示各種復雜的結構
1、對象:對象在js中表示為「{}」括起來的內容,數據結構為 {key:value,key:value,...}的鍵值對的結構,在面向對象的語言中,key為對象的屬性,value為對應的屬性值,所以很容易理解,取值方法為 對象.key 獲取屬性值,這個屬性值的類型可以是 數字、字元串、數組、對象幾種。在Java中就是一種Map結構。
2、數組:數組在js中是中括弧「[]」擴起來的內容,數據結構為 ["java","javascript","vb",...],取值方式和所有語言中一樣,使用索引獲取,欄位值的類型可以是 數字、字元串、數組、對象幾種。在Java中是一種list結構。
經過對象、數組2種結構就可以組合成復雜的數據結構了。
二、Json in Javascript
使用Json語法創建對象
var people = {"name":"jack","sex":"mail"};
可以通過這種語法創建json對象,用「{}」括起來,用「,」隔開key:value
使用Json語法創建數組
var arr =[value1,value2...];
一個包含多個people的數組 peoples = [{"name":"jack","sex":"mail"},
"name":"lily","sex":"femail"};
Json數組可以通過這種語法創建,用"[]"括起來,數組元素之間用「,」分隔開,下面是這種語法的示意圖:
在使用Json格式字元串與伺服器交互時候,可以利用Json擴展的方法將字元串轉換成一個JavaScript對象,或者將一個對象轉換成Json格式字元串。不過先要登錄http://www.json.org下載Json2.js文件。引入該包後,js對象直接用toJSONString()裝換為字元串格式,字元串可以用parseJSON()轉換成js對象。
訪問數據
只需用點號表示法來表示數組元素。所以,要想訪問 上面peoples列表的第一個條目的名字,只需在 JavaScript 中使用下面這樣的代碼:
peoples[0].name
利用這樣的語法,可以處理任何 JSON 格式的數據,而不需要使用任何額外的 JavaScript 工具包或 API。
修改數據
正如可以用點號和方括弧訪問數據,也可以按照同樣的方式輕松地修改數據:
peoples[0].name = "Rachmaninov";
在將字元串轉換為 JavaScript 對象之後,就可以像這樣修改變數中的數據。
D. webservice介面開發,我客戶端,服務端返給我的字元串里有4層,有json和json組成的數組,我該怎麼打開解析
你可以這樣!!Java的Servlet裡面的response有個Writer是專門向向前台寫東西的。也可以寫Object。然後你可以觀察下JSON的規則:
1.有一種是這樣的:
{'3','54','54'}這是最簡單的一種JSON
你可以觀察到,這種寫法和數組的寫法還有List轉換成toString後的寫法是一模一樣的,所以當你需要向前台傳送一個列表的時候,就可以使用Writer.write(list)這種寫法,然後前台使用Ajax接收下就可以了。
2.有一種是這樣的:
{name:"ewhq",password:"dashk"}
你可以觀察到,這種寫法和Java裡面的map轉換成toString後的寫法是一模一樣的,那麼你需要傳輸這樣的格式的時候,就直接writer.write(map),就可以了,toString也不需要寫,會幫你自動轉換的。
一般來說,兩種格式都是會結合起來的,當你需要傳輸一個表格的內容時:那麼假設內容是這樣
username password
________________
name1 pass1
name2 pass2
這樣,你使用兩個map來存儲這兩條數據
然後再使用List把兩個Map加入進去,這個時候,數據就變成了
{{username:"name1",password:'pass2'},{username:"name2",password:"pass2"}}
然後,既然你做過XML的,那麼後面就應該懂得怎麼做了吧!
E. vs2012的asp.net怎麼解析json
asp.net解析json(反序列化)的常用方法:
在.Net framework 3.5之後有了System.Runtime.Serialization.Json命名空間,利用這個命名空間可以方便的序列化反序列化json數據。
1、序列化Person類,如下代碼定義:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.Serialization;
namespace WebApplication1
{
[Serializable]
[DataContract]
public class Person
{
[DataMember(Order=1,Name="id")]
public int ID { get; set; }
[DataMember(Order=2,Name="name")]
public String Name { get; set; }
}
}
注意:需要做json序列化的屬性必須設置DataMember的屬性,可以指定Order和Name,分別表示順序號和屬性序列化時的名稱。
2、DataContractJsonSerializer類提供了WriteObject(Stream,Object)和ReadObject(Object)兩個方法來做json的序列化和反序列化。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.Serialization.Json;
using System.IO;
using System.Text;
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Person person = new Person { ID = 1,Name="OutOfMemory.CN" };
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Person));
//序列化json對象
using (var ms = new MemoryStream())
{
jsonSerializer.WriteObject(ms, person);
String json = Encoding.UTF8.GetString(ms.ToArray());
literalJson.Text = json;
}
//解析json對象(也叫反序列化)
var jsonText = @"{""id"":2,""name"":""OutOfMemory.CN""}";
using (var ms = new MemoryStream())
{
var buffer = Encoding.UTF8.GetBytes(jsonText);
ms.Write(buffer, 0, buffer.Length);
ms.Seek(0, SeekOrigin.Begin);
var objPerson = (Person)jsonSerializer.ReadObject(ms);
literalPersonInfo.Text = string.Format("person id == {0},person name = {1}", objPerson.ID, objPerson.Name);
}
}
}
}
F. 如何解析從webservice返回的json
如何解析從webservice返回的json。
解析json我個人選擇sbjson庫。還有其他的如touchJSon和YAJL等選擇,您可以自行下載決定(用哪個)。
讓我們來對什麼是json以及如何用他做一點簡單的描述。
wikiw上說:
json(javascript Object Notation 的縮寫)是一個基於文本的,人類可讀的,開放標準的輕量級數據交換格式。它繼承了javascript中的簡單數據結構和相關數組對象,稱為對象。不管它 和javascript的瓜葛,json是語言獨立的,幾乎所有編程語言都能解析它。
json以鍵值對來表示數據。每個值被一個鍵名字引用(鍵名字是個string)。如果你想以json表示人名,他們的名字將被"name"鍵引用,如下:
「name」 : 「James」
所以json用一種容易被應用程序傳遞的方式表現數據,非常完美。
所以當從webservice解析數據時,你要做的第一件事就是搞清楚你的模型。下面我們會分析webservice的響應數據,搞清楚哪些bit代表對象,對象數組,對象所屬的欄位,等等。
但是json可以表示哪些類型的數據呢?
1.對象是大括弧內的所有東東
2.字元串用雙引號
3.數字只是簡單的顯示,如 12345
4. 數組由中括弧包圍
5.布爾值從'true'和'false'獲得,沒有引號
6.null值由'null'表示,沒有引號
下面的例子使用了所有這些數據類型:(顯然並沒有bool和null類型--譯者按)
{
"firstName": "John",
"lastName": "Smith",
"age": 25,
"address":
{
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
},
"phoneNumber":
[
{ "type": "home", "number": "212 555-1234"},
{ "type": "fax", "number": "646 555-4567"}
]
}
以上數據的objective-c表示為:
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *firstName;
NSString *lastName;
NSInteger age;
NSDictionary *address;
NSArray *phoneNumbers;
}
@end
你會認為我們漏掉了一些信息,比如地址的詳情,以及電話號碼。怎麼建立你的對象模型是你決定的事情。
我選擇了用字典保存地址詳情,每個值用一個key名字引用,就像在json中一樣。電話號碼也保存在字典里,但是這些字典是放到數組中的。
如果你希望,你可以創建一個名為Adress的類,用它來保存地址詳情。這會變得更像面向對象的方式,如果在app的其他地方還要用到address,並且不必綁定到person上的話會很有用。
一旦你有了自己的對象模型,你需要從json中得到數據並創建模型的實例。
sbjson有一個有用的sbjsonparser類,可以在一行內搞定整個json串的解析:
SBJsonParser *jsonParser = [[SBJsonParser alloc] init];
NSError *error = nil;
NSArray *jsonObjects = [jsonParser objectWithString:jsonString error:&error];
[jsonParser release], jsonParser = nil;
sbjson將json作為objective-c的字典來處理。對於不同的webservice,你可能得到一個頂級的json對象或者一個數組。因 此,objectWithString:error:有一個id類型返回值。你可以使用objective-c的動態特性來決定解析返回時採用何種數據來 接收,如下:
id jsonObject = [jsonParser objectWithString:jsonString error:&error];
if ([jsonObject isKindOfClass:[NSDictionary class]]) // treat as a dictionary, or reassign to a dictionary ivar else if ([jsonObject isKindOfClass:[NSArray class]]) // treat as an array or reassign to an array ivar.
如果webservice永遠只返回兩種頂層表現的一種,你大可以繼續並假設它會是一個數組或字典,而不必擔心檢查(類型)。
現在你得到了以你可以通過objcetive-c管理的格式來表示json數據。你所要做的就是遍歷數組/字典的內容,並創建person對象來表示他們。
一件值得記住的事情是,遍歷如年齡這種數字將被包裹在NSNumber對象中,所以我們需要對其調用'intValue'來得到數字。
NSMutableArrary *people = [NSMutableArray array];
for (NSDictionary *dict in jsonObjects)
{
Person *newPerson = [[[Person alloc] init] autorelease];
[newPerson setFirstName:[dict objectForKey:@"firstName"]];
[newPerson setLastName:[dict objectForKey:@"lastName"]];
[newPerson setAge:[[dict objectForKey:@"age"] intValue]];
[newPerson setAddress:[dict objectForKey:@"address"]];
[newPerson setPhoneNumbers:[dict objectForKey:@"phoneNumber"]];
[people addObject:newPerson];
}
最終我們完成了。