首页 > 编程知识 正文

cjson数组生产(cjson解析json数组)

时间:2023-12-24 12:05:47 阅读:320946 作者:LTOQ

本文目录一览:

怎么用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 : %sn", pSub-valuestring);

// get number from json

pSub = cJSON_GetObjectItem(pJson, "number");

if(NULL == pSub)

{

//get number from json faild

}

printf("obj_2 : %dn", pSub-valueint);

// get bool from json

pSub = cJSON_GetObjectItem(pJson, "bool");

if(NULL == pSub)

{

// get bool from json faild

}

printf("obj_3 : %dn", 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 : %sn", pSubSub-valuestring);

cJSON_Delete(pJson);

}

int main()

{

char * p = makeJson();

if(NULL == p)

{

return 0;

}

printf("%sn", 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 faildn");

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:csharpoutputoutputdata.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":"hu01ceo","parts":[{"part":"u5f62","means":["good","fine","nice"]}]},{"ph_zh":"hu00e0o","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文件格式必须与你定的类一致,你懂得

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。