Json的筆記和摘抄

JSONjavascript

JavaScript Object Notation:是JavaScript的子集,直接用便可。不須要任何特殊的 API 或工具包java

格式:web

{「名」:」值」} 名值對,若是有多個,即數組則[]嵌套便可。json

{「name1」:[{「name1.1」:」value1.1」},{「name1.2」:」value1.2」}]}數組

{ "people": //名服務器

[ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }, 網絡

{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"}, app

{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }工具

]//值編碼

}

{ "programmers"://多個名值對

[ {"firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },

{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }],

"authors":

[{"firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },  { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },

{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }]

}

格式描述以下:

對象是一個無序的「‘名稱/值’對」集合。一個對象以「{」(左括號)開始,「}」(右括號)結束。每一個「名稱」後跟一個「:」(冒號);「‘名稱/值’ 對」之間使用「,」(逗號)分隔。

wps_clip_image-25592

數組是值(value)的有序集合。一個數組以「[」(左中括號)開始,「]」(右中括號)結束。值之間使用「,」(逗號)分隔。

wps_clip_image-12921

值(value)能夠是雙引號括起來的字符串(string)、數值(number)、true、false、 null、對象(object)或者數組(array)。這些結構能夠嵌套。

wps_clip_image-3610

即一個元素一個{},多個元素能夠寫在一個{}或用[]來實現。也就是說「名」就至關於一個變量名。

在javascript裏面使用JSON:此時people變量就再也不是JSON格式的字符串數據了。

Var people =

{ "programmers"://多個名值對

[ {"firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },

{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },

{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }],

"authors":

[{"firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },  { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },

{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }]

}//這樣就能夠了,就直接把JSON格式的數據給javascript的一個變量。

訪問JSON裏面的值:

people.programmers[0].lastName; 數組索引是從零開始的。結果是字符串值McLaughlin

修改裏面的值:

people.programmers[0].lastName = 「new_Value」;

轉換會JSON字符串:

String  newJSONtext = people.toJSONString();//不是javascript爲弱類型麼?怎麼用String

能夠將 任何JavaScript 對象轉換爲 JSON 文本,以下:

String myObjectJSON = myObject.toJSONString();

網絡教程:http://www.w3school.com.cn/json/

Eval():可使用eval()方法,用於執行一個javascript段,返回執行結果。對於XML,使用DOM來處理。JSON比XML在Ajax方面更快。用eval()處理JSON字符串。

JSON 語法規則

JSON 語法是 JavaScript 對象表示法語法的子集。

· 數據在名稱/值對中 」 firstName」:」Jone」  等價JS的firstName=」Jone」

· 數據由逗號分隔

· 花括號保存對象

· 方括號保存數組

JSON 值

JSON 值能夠是:(就是名值對的值)

· 數字(整數或浮點數)

· 字符串(在雙引號中)

· 邏輯值(true 或 false)

· 數組(在方括號中)

· 對象(在花括號中) :就是{裏面是名值對,或數組,對象等};

· null

JSON 文件

· JSON 文件的文件類型是 ".json"

· JSON 文本的 MIME 類型是 "application/json"

JSON的經常使用用法是從web 服務器讀JSON字符串,或者說是後臺傳給前臺。

從以前能夠知道JSON就是對象的訪問放式,可是在JS中倒是一個字符串,那麼要做爲對象怎麼辦??就用eval()方法編譯JSON字符串,返回的對象就能夠了。

var txt = '{ "employees" : [' +

'{ "firstName":"Bill" , "lastName":"Gates" },' +

'{ "firstName":"George" , "lastName":"Bush" },' +

'{ "firstName":"Thomas" , "lastName":"Carter" } ]}';

var obj = eval ("(" + txt + ")");//爲了不語法錯,須要加括號。

obj.employees[1].firstName//就能夠訪問或賦值了。

讓JSON能夠傳遞到服務器,那麼就要遵循GWT格式,因爲不能直接是GWT的標準格式,那麼就須要一些額外的操做:

第一,引用HTTP 和JSON 支持。

第二,在客戶端建立JSON 數據,提交到服務器

第三,在服務器上重寫數據格式解析的代碼,使之支持JSON 格式的數據

第四,在服務器上組織JSON 格式的數據,返回給客戶端。

第五,客戶端解析服務器傳回的JSON 數據,正確的顯示。

詳見JSON教程.pdf。

這裏就有了類型了:JSONArray,JSONBoolean,JSONException,JSONObject 等等。一整個JSON均可以用JSONObject來裝。見教程2頁。

JSONObject input = new JSONObject();

JSONString value = new JSONString(「value」);

Json寫完以後,遇到的最多的問題就是解析錯誤,格式不對,那怎麼調?

下面給個在線校驗的工具,寫完以後校驗一下就完畢了:

http://www.bejson.com/

對於C++解析Json,下面給一個網上的文章,很好用:

【轉】C++解析JSON的好文章

使用C++處理JSON數據交換格式

1、摘要

    JSON的全稱爲:JavaScript Object Notation,顧名思義,JSON是用於標記Javascript對象的,JSON官方的解釋爲:JSON是一種輕量級的數據傳輸格式。

本文並不詳細介紹JSON自己的細節,旨在討論如何使用C++語言來處理JSON。關於JSON更具體的信息,可參見JSON官網:http://www.json.org

2、本文選擇處理JSON的C++庫

   本文選擇一個第三方庫jsoncpp來解析JSON。jsoncpp是比較出名的C++ JSON解析庫。在JSON官網也是首推的。

下載地址爲:http://sourceforge.net/projects/jsoncpp。本文使用的jsoncpp版本爲:0.5.0。

3、jsoncpp在Windows下的編譯

要使用第三方源碼庫,第一步少不了的就是編譯,將源碼文件編譯成咱們方便使用的動態連接庫、靜態連接庫或者靜態導入庫[1]。

jsconcpp進行JSON解析的源碼文件分佈在include/json、src/lib_json下。其實jsoncpp源碼並很少,爲了方便產品管理,此處不必將其編譯爲動態連接庫或者靜態導入庫,因此咱們選擇使用靜態連接庫[2]。

jsoncpp已經處理的很完善了,全部編譯選項都已經配置好,打開makefiles/vs71/jsoncpp.sln即可以開始編譯(默認是使用VS2003編譯器的,打開時直接按照VS2005提示轉換便可)。

4、jsoncpp使用詳解

    jsoncpp主要包含三種類型的class:Value、Reader、Writer。jsoncpp中全部對象、類名都在namespace Json中,包含json.h便可。

    Json::Value只能處理ANSI類型的字符串,若是C++程序是用Unicode編碼的,最好加一個Adapt類來適配。

一、Value

    Json::Value是jsoncpp中最基本、最重要的類,用於表示各類類型的對象,jsoncpp支持的對象類型可見Json::ValueType枚舉值。

可以下是用Json::Value類:

Json::Value json_temp;      //臨時對象,供以下代碼使用

json_temp["name"] = Json::Value("huchao");

json_temp["age"] = Json::Value(26);

Json::Value root;  //表示整個json對象

root["key_string"] = Json::Value("value_string");         //新建一個Key(名爲:key_string),賦予字符串值:"value_string"。

root["key_number"] = Json::Value(12345);            //新建一個Key(名爲:key_number),賦予數值:12345。

root["key_boolean"] = Json::Value(false);              //新建一個Key(名爲:key_boolean),賦予bool值:false。

root["key_double"] = Json::Value(12.345);            //新建一個Key(名爲:key_double),賦予double值:12.345。

root["key_object"] = Json_temp;                           //新建一個Key(名爲:key_object),賦予json::Value對象值。

root["key_array"].append("array_string");             //新建一個Key(名爲:key_array),類型爲數組,對第一個元素賦值爲字符串:"array_string"。

root["key_array"].append(1234);                           //爲數組key_array賦值,對第二個元素賦值爲:1234。

Json::ValueType type = root.type();                       //得到root的類型,此處爲objectValue類型。

注:跟C++不一樣,JavaScript數組能夠爲任意類型的值,因此jsoncpp也能夠。

   如上幾個用法已經能夠知足絕大部分json應用了,固然jsoncpp還有一些其餘同能,好比說設置註釋、比較json大小、交換json對象等,都很容易使用,你們本身嘗試吧。

二、Writer

如上說了Json::Value的使用方式,如今到了該查看剛纔賦值內容的時候了,查看json內容,使用Writer類便可。

Jsoncpp的Json::Writer類是一個純虛類,並不能直接使用。在此咱們使用Json::Writer的子類:Json::FastWriter、Json::StyledWriter、Json::StyledStreamWriter。

顧名思義,用Json::FastWriter來處理json應該是最快的,下面咱們來試試。

Json::FastWriter fast_writer;

std::cout << fast_writer.write(root) << std::endl;

輸出結果爲:

{"key_array":["array_string",1234],"key_boolean":false,"key_double":12.3450,"key_number":12345,"key_object":{"age":26,"name":"huchao"},"key_string":"value_string"}

再次顧名思義,用Json::StyledWriter是格式化後的json,下面咱們來看看Json::StyledWriter是怎樣格式化的。

Json::StyledWriter styled_writer;

std::cout << styled_writer.write(root) << std::endl;

輸出結果爲:

{

   "key_array" : [ "array_string", 1234 ],

   "key_boolean" : false,

   "key_double" : 12.3450,

   "key_number" : 12345,

   "key_object" : {

      "age" : 26,

      "name" : "huchao"

   },

   "key_string" : "value_string"

}

三、Reader

    Json::Reader是用於讀取的,說的確切點,是用於將字符串轉換爲Json::Value對象的,下面咱們來看個簡單的例子。

  Json::Reader reader;

  Json::Value json_object;

  const char* json_document = "{\"age\" : 26,\"name\" : \"huchao\"}";

  if (!reader.parse(json_document, json_object))

    return 0;

  std::cout << json_object["name"] << std::endl;

  std::cout << json_object["age"] << std::endl;

輸出結果爲:

"huchao"

26

可見,上述代碼已經解析出了json字符串。

--------------------------------------

[1]:使用第三方源碼最簡單的方法是直接將文件加入工程,但這樣不利於源碼、軟件產品管理,對於通常軟件開發來講,不建議使用。

[2]:若是真須要編譯成動態連接庫、靜態導入庫的話,可使用VS新建一個工程屬性,而後在Project --> Properties中進行相應的設置便可。

相關文章
相關標籤/搜索