cjson解析和(cjson解析數組)

本文目錄一覽:

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直接可運行

怎麼用C語言獲取JSON中的數據?

用C語言獲取JSON中的數據的方法是使用 CJSON。

以下簡單介紹用CJSON的思路及實現:

1)創建json,從json中獲取數據。

#nclude stdio.h

#include “cJSON.h”

char * makeJson()

{

cJSON * pJsonRoot = NULL;

pJsonRoot = cJSON_CreateObject();

if(NULL == pJsonRoot)

{

//error happend here

return NULL;

}

cJSON_AddStringToObject(pJsonRoot, “hello”, “hello world”);

cJSON_AddNumberToObject(pJsonRoot, “number”, 10010);

cJSON_AddBoolToObject(pJsonRoot, “bool”, 1);

cJSON * pSubJson = NULL;

pSubJson = cJSON_CreateObject();

if(NULL == pSubJson)

{

// create object faild, exit

cJSON_Delete(pJsonRoot);

return NULL;

}

cJSON_AddStringToObject(pSubJson, “subjsonobj”, “a sub json string”);

cJSON_AddItemToObject(pJsonRoot, “subobj”, pSubJson);

char * p = cJSON_Print(pJsonRoot);

// else use :

// char * p = cJSON_PrintUnformatted(pJsonRoot);

if(NULL == p)

{

//convert json list to string faild, exit

//because sub json pSubJson han been add to pJsonRoot, so just delete pJsonRoot, if you also delete pSubJson, it will coredump, and error is : double free

cJSON_Delete(pJsonRoot);

return NULL;

}

//free(p);

cJSON_Delete(pJsonRoot);

return p;

}

void parseJson(char * pMsg)

{

if(NULL == pMsg)

{

return;

}

cJSON * pJson = cJSON_Parse(pMsg);

if(NULL == pJson)

{

// parse faild, return

return ;

}

// get string from json

cJSON * pSub = cJSON_GetObjectItem(pJson, “hello”);

if(NULL == pSub)

{

//get object named “hello” faild

}

printf(“obj_1 : %s\n”, pSub-valuestring);

// get number from json

pSub = cJSON_GetObjectItem(pJson, “number”);

if(NULL == pSub)

{

//get number from json faild

}

printf(“obj_2 : %d\n”, pSub-valueint);

// get bool from json

pSub = cJSON_GetObjectItem(pJson, “bool”);

if(NULL == pSub)

{

// get bool from json faild

}

printf(“obj_3 : %d\n”, pSub-valueint);

// get sub object

pSub = cJSON_GetObjectItem(pJson, “subobj”);

if(NULL == pSub)

{

// get sub object faild

}

cJSON * pSubSub = cJSON_GetObjectItem(pSub, “subjsonobj”);

if(NULL == pSubSub)

{

// get object from subject object faild

}

printf(“sub_obj_1 : %s\n”, pSubSub-valuestring);

cJSON_Delete(pJson);

}

int main()

{

char * p = makeJson();

if(NULL == p)

{

return 0;

}

printf(“%s\n”, p);

parseJson(p);

free(p);//這裡不要忘記釋放內存,cJSON_Print()函數或者cJSON_PrintUnformatted()產生的內存,使用free(char *)進行釋放

return 0;

}

2)創建json數組和解析json數組

//創建數組,數組值是另一個JSON的item,這裡使用數字作為演示

char * makeArray(int iSize)

{

cJSON * root = cJSON_CreateArray();

if(NULL == root)

{

printf(“create json array faild\n”);

return NULL;

}

int i = 0;

for(i = 0; i iSize; i++)

{

cJSON_AddNumberToObject(root, “hehe”, i);

}

char * out = cJSON_Print(root);

cJSON_Delete(root);

return out;

}

//解析剛剛的CJSON數組

void parseArray(char * pJson)

{

if(NULL == pJson)

{

return ;

}

cJSON * root = NULL;

if((root = cJSON_Parse(pJson)) == NULL)

{

return ;

}

int iSize = cJSON_GetArraySize(root);

for(int iCnt = 0; iCnt iSize; iCnt++)

{

cJSON * pSub = cJSON_GetArrayItem(root, iCnt);

if(NULL == pSub)

{

continue;

}

int iValue = pSub-valueint;

printf(“value[%2d] : [%d]\n”, iCnt, iValue);

}

cJSON_Delete(root);

return;

}

有兩種方法:

一是標準的輸出輸入方式 比如新建一個磁碟文件c:\a.txt, 將鍵盤輸入的一字元串寫到文件中:

FILE *ft;

char str[50];

ft=fopen(“c:\\a.txt”,”w+”);

printf(“輸入一個字元串:”);

scanf(“%s”,str);

fputs(str,ft);

fclose(ft);

//重新打開這個文件並讀出字元串,顯示在屏幕上 ft=fopen(“c:\\a.txt”,”rt”);

fgets(str,50,ft);

fclose(ft); printf(“%s”,str);

二是低級輸入輸出方式 仍如上例:

int hd; char str[50]; printf(“輸入一個字元串:”);

scanf(“%s”,str);

hd=open(“c:\\a.txt”,O_CREAT|O_TEXT|O_WRONLY);

write(hd,str,strlen(str));

close(hd); //重新打開這個文件並讀出字元串,顯示在屏幕上。

hd=open(“c:\\a.txt”,O_TEXT|O_RDONLY); read(hd,str,50);

close(hd); printf(“%s”,str)。

這種json怎麼解析?[ “1”, “2”, “3”, “4” ]

int cjson_parse(char *json_data)

{

cJSON *json,*item;

int i;

json=cJSON_Parse(json_data);

if (!json)

{

printf(“Error before: [%s]\n”,cJSON_GetErrorPtr());

return -1;

}

else

{

int size=cJSON_GetArraySize(json);

for(i=0;isize;i++)

{

item=cJSON_GetArrayItem(json,i);

//atoi(item-valuestring)等到整數,

}

}

}

————————————————

版權聲明:本文為CSDN博主「hairubb」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:

請教Qt如何解析出Json的數據

JSON(JavaScript Object Notation)是一種輕量級的數據交換格式。它基於JavaScript(Standard ECMA-262 3rd Edition – December 1999)的一個子集。 JSON採用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數據交換語言。易於人閱讀和編寫,同時也易於機器解析和生成。

常用的Json庫

JsonCpp

JsonCpp是一個C++用來處理JSON數據的開發包。

網址:.

cJSON

cJSON是一個超輕巧,攜帶方便,單文件,簡單的可以作為ANSI-C標準的JSON解析器。

網址:.

QJson

QJson是一個基於Qt的開發包用來將JSON數據解析成QVariant對象,JSON的數組將被映射為QVariantList實例,而其他對象映射為QVariantMap實例。

網址:.

關於Qt中對JSON的生成與解析,Qt5以前的版本,需要去進行單獨下載、編譯,才能使用。到了Qt5,提供了專門的QJsonDocument類來讀取和寫入JSON文檔。

Qt5中JSON的生成與解析

QJsonDocument

QJsonDocument既可以從一個基於文本表示的UTF-8編碼,又可以從Qt自己的二進位格式讀取和寫入這個文件。

JSON文檔可以從它的基於文本的表示使用QJsonDocument::fromJson()轉換為QJsonDocument,用.toJSON()將其轉換迴文字。解析器非常快速和高效,將JSON轉換為二進位表示。

QJsonObject

QJsonObject類用於封裝JSON對象。

JSON對象是鍵值對,其中鍵是唯一的字元串,其值由QJsonValue代表。一個QJsonObject可以從QVariantMap轉換/被轉換。

QJsonArray

QJsonArray類用於封裝JSON數組。

一個JSON數組列表值。該列表可以通過從陣列插入和移除QJsonValue的操縱。一個QJsonArray可以從QVariantList轉換為/被轉換。

QJsonDocument有效解析後的文檔可以使用!iSNull()判斷。使用isArray()和isObject()來判斷是否包含一個數組或對象。文檔中包含的數組或對象可以使用array()或object()進行檢索,然後讀取或操縱。

示例

QJsonObject

(1)生成Json

QJsonObject json;

json.insert(“name”, QString(“Qt”));

json.insert(“version”, 5);

json.insert(“windows”, true);

QJsonDocument document;

document.setObject(json);

QByteArray byte_array = document.toJson(QJsonDocument::Compact);

QString json_str(byte_array);

結果:

json_str:{“name”: “Qt”,”version”: 5,”windows”: true}

(2)解析Json

QJsonParseError json_error;

QJsonDocument parse_doucment = QJsonDocument::fromJson(byte_array, json_error);

if(json_error.error == QJsonParseError::NoError)

{

if(parse_doucment.isObject())

{

QJsonObject obj = parse_doucment.object();

if(obj.contains(“name”))

{

QJsonValue name_value = obj.take(“name”);

if(name_value.isString())

{

QString name = name_value.toString();

}

}

if(obj.contains(“version”))

{

QJsonValue version_value = obj.take(“version”);

if(version_value.isDouble())

{

int version = version_value.toVariant().toInt();

}

}

if(obj.contains(“windows”))

{

QJsonValue version_value = obj.take(“windows”);

if(version_value.isBool())

{

bool flag = version_value.toBool();

}

}

}

}

結果:

name:Qt

version:5

windows:true

QJsonArray

(1)生成Json

QJsonArray json;

json.insert(0, QString(“Qt”));

json.insert(1, QString(“version”));

json.insert(2, true);

QJsonDocument document;

document.setArray(json);

QByteArray byte_array = document.toJson(QJsonDocument::Compact);

QString json_str(byte_array);

結果:

json_str:[“Qt”,”version”,true]

(2)解析Json

QJsonParseError json_error;

QJsonDocument parse_doucment = QJsonDocument::fromJson(byte_array, json_error);

if(json_error.error == QJsonParseError::NoError)

{

if(parse_doucment.isArray())

{

QJsonArray array = parse_doucment.array();

int size = array.size();

for(int i=0; i

{

QJsonValue value = array.at(i);

if(value.isString())

{

QString name = value.toString();

}

else if(value.isBool())

{

bool flag = value.toBool();

}

}

}

}

結果:

數組不同下標對應的值

0:Qt

1:version

2:true

如上,簡單介紹一下常用的JSON庫以及Qt中對JSON的生成與解析,如需更多資料請參考官方文檔,還是那句話,沒有比助手更好、更專業的資料了!

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/312492.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-06 09:47
下一篇 2025-01-06 09:47

相關推薦

  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • Python去掉數組的中括弧

    在Python中,被中括弧包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括弧。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Python二維數組對齊輸出

    本文將從多個方面詳細闡述Python二維數組對齊輸出的方法與技巧。 一、格式化輸出 Python中提供了格式化輸出的方法,可以對輸出的字元串進行格式化處理。 names = [‘A…

    編程 2025-04-29
  • Java創建一個有10萬個元素的數組

    本文將從以下方面對Java創建一個有10萬個元素的數組進行詳細闡述: 一、基本介紹 Java是一種面向對象的編程語言,其強大的數組功能可以支持創建大規模的多維數組以及各種複雜的數據…

    編程 2025-04-28
  • Python數組隨機分組用法介紹

    Python數組隨機分組是一個在數據分析與處理中常用的技術,它可以將一個大的數據集分成若干組,以便於進行處理和分析。本文將從多個方面對Python數組隨機分組進行詳細的闡述,包括使…

    編程 2025-04-28
  • Python數組索引位置用法介紹

    Python是一門多用途的編程語言,它有著非常強大的數據處理能力。數組是其中一個非常重要的數據類型之一。Python支持多種方式來操作數組的索引位置,我們可以從以下幾個方面對Pyt…

    編程 2025-04-28
  • Python語言數組從大到小排序符號的用法介紹

    當我們使用Python進行編程的時候,經常需要對數組進行排序從而使數組更加有序,而數組的排序方式有很多,其中從大到小排序符號是一種常見的排序方式。本文將從多個方面對Python語言…

    編程 2025-04-28
  • Python列錶轉numpy數組

    本文將闡述Python中列表如何轉換成numpy數組。在科學計算和數據分析領域中,numpy數組扮演著重要的角色。Python與numpy的無縫結合使得數據操作更加方便和高效。因此…

    編程 2025-04-27

發表回復

登錄後才能評論