本文目錄一覽:
- 1、怎麼用C語言獲取JSON中的數據?
- 2、json對象和json數組和數組的區別
- 3、怎麼用 C/C++ 把結構體數組轉成 JSON串
- 4、c# json對象中含有數組,數組中又含有數組!
- 5、如何向json對象追加一個新的數組
- 6、怎樣用C#把JSON數據轉換為list或數組
怎麼用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對象和json數組和數組的區別
Json的規格非常簡單,只用一個頁面幾百個字就能說清楚,而且Douglas Crockford聲稱這個規格永遠不必升級,因為該規定的都規定了。
1) 並列的數據之間用逗號(”, “)分隔。
2) 映射用冒號(”: “)表示。
3) 並列數據的集合(數組)用方括號(“[]“)表示。
4) 映射的集合(對象)用大括號(”{}”)表示。
上面四條規則,就是Json格式的所有內容。
比如,下面這句話:
“北京市的面積為16800平方公里,常住人口1600萬人。上海市的面積為6400平方公里,常住人口1800萬。”
寫成json格式就是這樣:
[
{“城市”:”北京”,”面積”:16800,”人口”:1600},
{“城市”:”上海”,”面積”:6400,”人口”:1800}
]
如果事先知道數據的結構,上面的寫法還可以進一步簡化:
[
[“北京”,16800,1600],
[“上海”,6400,1800]
]
由此可以看到,json非常易學易用。所以,在短短几年中,它就取代xml,成為了互聯網上最受歡迎的數據交換格式。
我猜想,Douglas Crockford一定事先就知道,數據結構可以簡化成三種形式,否則怎麼可能將json定義得如此精鍊呢!
3.
學習javascript的時候,我曾經一度搞不清楚”數組”(array)和”對象”(object)的根本區別在哪裡,兩者都可以用來表示數據的集合。
比如有一個數組a=[1,2,3,4],還有一個對象a={0:1,1:2,2:3,3:4},然後你運行alert(a[1]),兩種情況下的運行結果是相同的!這就是說,數據集合既可以用數組表示,也可以用對象表示,那麼我到底該用哪一種呢?
我後來才知道,數組表示有序數據的集合,而對象表示無序數據的集合。如果數據的順序很重要,就用數組,否則就用對象。
4.
當然,數組和對象的另一個區別是,數組的數據沒有”名稱”(name),對象的數據有”名稱”(name)。
但是問題是,很多編程語言中,都有一種叫做”關聯數組”(associative array)的東西。這種數組中的數據是有名稱的。
比如在javascript中,可以這樣定義一個對象:
var a={“城市”:”北京”,”面積”:16800,”人口”:1600};
但是,也可以定義成一個關聯數組:
a[“城市”]=”北京”;
a[“面積”]=16800;
a[“人口”]=1600;
這起初也加劇了我對數組和對象的混淆,後來才明白,在Javascript語言中,關聯數組就是對象,對象就是關聯數組。這一點與php語言完全不同,在php中,關聯數組也是數組。
比如運行下面這段javascript:
var a=[1,2,3,4];
a[‘foo’]=’Hello World’;
alert(a.length);
最後的結果是4,也就是說,數組a的元素個數是4個。
但是,運行同樣內容的php代碼就不一樣了:
?php
$a=array(1,2,3,4);
$a[“foo”]=”Hello world”;
echo count($a);
?
最後的結果是5,也就是說,數組a的元素個數是5個。
怎麼用 C/C++ 把結構體數組轉成 JSON串
用CSTRING的GetBuffer函數返回一個存放字符的頭指針,用一個CHAR *來接受他,然後用下標操作就可以了。
例如:char * ptr = str.GetBuffer();
定義一個數組來接受各個字符
cahr array[10]=”0″;
char array[0]=ptr[0];
char array[1]=ptr[1];
也可以用一個循環,這樣ARRAY數組就保存了CSTRING中的各個字符.
c# json對象中含有數組,數組中又含有數組!
安裝Json.net,using Newtonsoft.Json.Linq;
string result = string.Empty;
using (StreamReader sr = new StreamReader(File.Open(@”D:\csharp\output\output\data.json”, FileMode.Open)))
{
result = sr.ReadToEnd();
}
JObject jo = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(result);
Console.WriteLine(jo[“data”][“symbols”][0][“parts”][0][“means”][1].ToString());
Console.ReadLine();
data.json就是存放的
{“errno”:0,”data”:{“word_name”:”\u597d”,”symbols”:[{“ph_zh”:”h\u01ceo”,”parts”:[{“part”:”\u5f62″,”means”:[“good”,”fine”,”nice”]}]},{“ph_zh”:”h\u00e0o”,”parts”:[{“part”:”\u52a8″,”means”:[“like”,”love”,”be fond of”]},{“part”:”\u540d”,”means”:[“a surname”]}]}]},”to”:”en”,”from”:”zh”}
如何向json對象追加一個新的數組
js中如何向json數組添加元素
比如現在有一條var jsonstr=“ [{‘name’:’a’,’value’:1},{‘name’:’b’,’value’:2}] ”; 然後將其變成json格式的 var json=eval(‘(‘+jsonstr+’)’); 現在我想直接對這個json數組進行操作向其中添加元素,有沒有快捷的方法,還是說必須對上面的字符串進行操作再…展開
冰之幽夢 | 瀏覽 79146 次 2013-08-26 11:44
2015-07-13 09:27最佳答案
json 數組也是數組
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//1、
var jsonstr=”[{‘name’:’a’,’value’:1},{‘name’:’b’,’value’:2}]”;
var jsonarray = eval(‘(‘+jsonstr+’)’);
var arr =
{
“name” : $(‘#names’).val(),
“value” : $(‘#values’).val()
}
jsonarray.push(arr);
//2、
var json={};// 定義一個json對象
json.array1=[“2″,”4”];// 增加一個新屬性,此屬性是數組
json.array1[json.array1.length]=’6′;// 數組追加一個元素
alert(json.array1)
怎樣用C#把JSON數據轉換為list或數組
引用,在項目中引用
using System.ServiceModel.Web;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
==================
定一個跟Json一樣的類
public class CJsonObj
{
//屬性
}
你的Json是文件,就把這文件讀到流裡面來再轉
string jsonText = System.IO..ReadAllText(Json文件); //這就讀出了文件,並存成了string
ListCJsonObj _Test = new ListCJsonObj(); //建立list
//這個是關鍵對象DataContractJsonSerializer
DataContractJsonSerializer _Json = new DataContractJsonSerializer(_Test.GetType());
//轉碼,把string 轉成byte[]數組
byte[] _Using = System.Text.Encoding.UTF8.GetBytes(_JsonText);
//開個流,把數組加進去
System.IO.MemoryStream _MemoryStream = new System.IO.MemoryStream(_Using);
_MemoryStream.Position = 0; //流從0開始
//就這句,讀到List里了
_Test = (ListTest)_Json.ReadObject(_MemoryStream);
//你的JSON文件格式必須與你定的類一致,你懂得
原創文章,作者:GAFX,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/135370.html