本文目錄一覽:
c#後台解析json數組,該怎麼解決
使用開源的類庫Newtonsoft.Json(下載地址)。下載後加入工程就能用。通常可以使用JObject, JsonReader, JsonWriter處理。這種方式最通用,也最靈活,可以隨時修改不爽的地方。
string jsonArrayText1 = “[{‘a’:’a1′,’b’:’b1′},{‘a’:’a2′,’b’:’b2′}]”;
JArray ja = (JArray)JsonConvert.DeserializeObject(jsonArrayText1);
string ja1a = ja[1][“a”].ToString();
//或者
JObject o = (JObject)ja[1];
string oa = o[“a”].ToString();
JSON中數組該如何解析呢?c++中使用jsoncpp
JSON是一個輕量級的數據定義格式,比起XML易學易用,而擴展功能不比XML差多少,用之進行數據交換是一個很好的選擇
JSON的全稱為:JavaScript Object Notation ,顧名思義,JSON是用於標記javascript對象的,詳情參考。
本文選擇第三方庫JsonCpp來解析json,JsonCpp是比較出名的c++解析庫,在json官網也是首推的。
JsonCpp簡介
JsonCpp主要包含三種類型的class:Value Reader Writer。
jsoncpp中所有對象、類名都在namespace json中,包含json.h即可。
注意: Json::Value只能處理ANSI類型的字元串,如果C++程序使用Unicode編碼的,最好加一個Adapt類來適配。
下載和編譯
本文運行環境是: Redhat 5.5 + g++version 4.6.1 + GNU Make 3.81 + jsoncpp-0.5.0
下載地址是:
解壓之後得到jsoncpp-src-0.5.0文件夾,我們只需要jsoncpp的頭文件和cpp文件,其中jsonscpp的頭文件位於jsoncpp-src-0.5.0includejson,jsoncpp的cpp文件位於jsoncpp-src-0.5.0srclib_json。
這裡我列出我們的工作目錄:
jsoncpp/ //工作目錄
|– include //頭文件根目錄
| |– json //json頭文件,對應jsoncpp-src-0.5.0includejson
|– src //cpp源碼文件根目錄
|– json //jsoncpp源碼文件,對應jsoncpp-src-0.5.0srclib_json
|– main.cpp //我們的主函數,調用jsoncpp的示例代碼
|– makefile //makefile,不用我們多說了吧,不懂請看我博客的makefile最佳實踐
反序列化Json對象
假設有一個json對象如下:
{ “name”: “json″, “array”: [ { “cpp”: “jsoncpp” }, { “java”: “jsoninjava” }, { ”php”: “support” } ] }
我們要實現這個json的反序列號代碼如下:
voidreadJson() { usingnamespacestd; std::stringstrValue = “{\”name\”:\”json\”,\”array\”:[{\”cpp\”:\”jsoncpp\”},{\”java\”:\”jsoninjava\”},{\”php\”:\”support\”}]}”; Json::Reader reader; Json::Value value; if(reader.parse(strValue, value)) { std::stringout= value[“name”].asString(); std::cout outstd::endl; constJson::Value arrayObj = value[“array”]; for(unsigned inti = 0;i arrayObj.size(); i++) { if(!arrayObj[i].isMember(“cpp”)) continue; out= arrayObj[i][“cpp”].asString(); std::cout out; if(i != (arrayObj.size() – 1)) std::cout std::endl; } } }
序列化Json對象
voidwriteJson() { usingnamespacestd; Json::Value root; Json::Value arrayObj; Json::Value item; item[“cpp”] = “jsoncpp”; item[“java”] = “jsoninjava”; item[“php”] = “support”; arrayObj.append(item); root[“name”] = “json”; root[“array”] = arrayObj; root.toStyledString(); std::stringout= root.toStyledString(); std::cout outstd::endl; }
cjson數組如何解析
JSONObject Gson Xstream等等的類庫都可以解析
請把你的json代碼提交上來JSONObject object = new JSONObject(json);JSONObject root = object.getJSONObject(“root”); JSONObject data = root.getJSONObject(“data”); JSONArray list = data.getJSONArray(“list”);for(int i=0; ilist.length(); i++){ JSONObject entityObj = list.getJSONObject(i); JSONArray entitys = entityObj.getJSONArray(“entity”); for(int j=0; jentitys.length(); j++){ JSONObject entity = entitys.getJSONObject(j); String date = entity.getString(“取消日期”); } }引入jar,替換你的json直接可運行
JSON解析器json-c
JSON-C實現了一個引用計數對象模型,它允許您輕鬆地使用C語言來構建JSON對象,將它們輸出為JSON格式的字元串,並將JSON格式字元串解析回JSON對象的C語言表示形式。它的目標是符合 RFC 7159 標準。
使用automake的編譯過程如下:
使用cmake編譯的過程如下:
cmake可選的幾個編譯選項為:
要使用json-c,最簡單的方式是包含json.h頭文件即可,或者最好是下列更具體的頭文件之一:
詳細且全面的API介紹文檔:
JSON-C支持的JSON對象類型有7種:
下面系列函數用於創建一個JSON對象:
給JSON對象增加欄位(不會增加引用計數):
刪除json對象的指定欄位,被刪除的對象引用計數減去1,如果這個val沒有更多的所有者,這個key對應的val被free,否則這個val的引用保存在內存中:
增加一個元素到json數組的末尾,obj引用計數不會增加,增加欄位的方式更加緊湊;如果需要獲取val的引用,需要用json_object_get()來傳遞該對象:
替換json數組中的值:
json數組的排序,這裡需要自己寫排序函數:
獲取json對象的長度,依據欄位的數目:
獲取json對象的哈希表:
獲取對象的數組列表:
獲取json的類型:
獲取json數組對象的長度:
獲取json對象的bool值,int和double對象是0轉換為FALSE,否則返回TRUE;非0長度的字元串返回TRUE;其他對象非空的話,返回TRUE:
獲取json對象的長度,如果參數不是string類型的json,返回0:
按照索引獲取json數組的對象:
轉換json對象到c字元串格式:
獲取JSON中指定類型的數值:
將字元串轉換為json對象:
以下兩個函數配合使用,前者獲取該對象指針的所有權,引用計數加1,如果對象已經被釋放,返回NULL;後者引用計數減1,如果對象已經被釋放,返回1:
類型判斷:
json_util.h提供了有關文件讀寫操作的函數,這個文件的內容是json格式的:
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/279486.html