JSON(03)C/C++处理JSON

  C/C++处理JSON的开源库有名的有两个libjson与cJSON. 个人认为cJSON更好用些。
把cJSON的例子调试了下.

效果:
   
   
 代码文件:
/***
*desc:通过cJSON来解析 
*/

#include <stdlib.h>
#include <stdio.h>
#include "cJSON.h"

void demo1()
{
	char *out ;
    cJSON *root,*fmt;
    root=cJSON_CreateObject();
    cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble"));
    cJSON_AddItemToObject(root, "format", fmt=cJSON_CreateObject());
    cJSON_AddStringToObject(fmt,"type",     "rect");
    cJSON_AddNumberToObject(fmt,"width",        1920);
    cJSON_AddNumberToObject(fmt,"height",       1080);
    cJSON_AddFalseToObject (fmt,"interlace");
    cJSON_AddNumberToObject(fmt,"frame rate",   24);

    out=cJSON_Print(root);
    printf("%s\n",out);
    //free(out);
    out=cJSON_Print(fmt);
    printf("%s\n",out);
    free(out);
	
	cJSON *jName = cJSON_GetObjectItem(root,"name");
	printf("name = %s \n",jName->valuestring);
}

void demo2()
{
	char text4[]="{\n		\"Image\": {\n			\"Width\":  800,\n			\"Height\": 600,\n			\"Title\":  \"View from 15th Floor\",\n			\"Thumbnail\": {\n				\"Url\":    \"http:/*www.json.com/image/481989943\",\n				\"Height\": 125,\n				\"Width\":  \"100\"\n			},\n			\"IDs\": [116, 943, 234, 38793]\n		}\n	}";
	char *out;cJSON *json;
	
	json=cJSON_Parse(text4);
	if (!json) 
	{
		printf("Error before: [%s]\n",cJSON_GetErrorPtr());}
	else
	{
		cJSON *pImage = cJSON_GetObjectItem(json,"Image");
		printf("Image = %s \n",pImage->valuestring);

		//int  nCount = cJSON_GetArraySize( pImage); 
		//printf("nCount = %d \n",nCount);

		//数组方式 0 
		cJSON * pArrayItem2 = cJSON_GetArrayItem(pImage, 2);
		//  "Title":        "View from 15th Floor",
		printf("2 pArrayItem2->valuestring = %s \n",pArrayItem2->valuestring);


		//数组方式 1 
		int nCount = cJSON_GetArraySize( cJSON_GetObjectItem(pImage,"Thumbnail") ); 
		printf("Thumbnail nCount = %d \n",nCount);

		/*
		 "Thumbnail":    {
                    "Url":  "http:/*www.json.com/image/481989943",
		*/
		cJSON * pArrayItemUrl= cJSON_GetArrayItem( cJSON_GetObjectItem(pImage,"Thumbnail") , 0);
		printf("Thumbnail Url = %s \n",pArrayItemUrl->valuestring);


		//数组方式 2
		nCount = cJSON_GetArraySize( cJSON_GetObjectItem(pImage,"IDs") ); 
		printf("IDs nCount = %d \n",nCount);

		/*
		 "IDs":  [116, 943, 234, 38793]
		*/
		cJSON * pArrayItem22 = cJSON_GetArrayItem( cJSON_GetObjectItem(pImage,"IDs") , 2);
		printf("22 IDs valueint 2= %d \n",pArrayItem22->valueint);

		//数组方式 4 
		cJSON *tasklist=cJSON_GetObjectItem(pImage,"Thumbnail")->child;//子对象 //IDs
		/*
		 "root":[{
        "value":"2011-03-17 11:15 - xxxx - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "id":"XXXX_20110315000"
		*/
		while(tasklist!=NULL)
		{
			//printf("%s\n",cJSON_GetObjectItem(tasklist,"value")->valuestring);
			tasklist=tasklist->next;
		}

		//数组方式 5 
		  nCount = cJSON_GetArraySize( pImage); 
		 //cJSON *pArrayItem; 
		 //for(int i= 0; i < nCount; i++)
		 //{
			//cJSON_Print( cJSON_GetArrayItem(pImage, i));
			//cJSON_Print( pArrayItem);
		 //}

		out=cJSON_Print(json);
		cJSON_Delete(json);
		printf("\n ------------\n %s\n",out);
		free(out);
	}
}


int main(void)
{
	printf("------------\n ");
	printf("构建JSON\n ");
	printf("------------\n \n");
	demo1();

	printf("\n------------\n");
	printf("解析JSON\n");
	printf("------------\n");
	demo2();
	return 0;
}

MAIL: xcl_168@aliyun.com
BLOG:http://blog.csdn.net./xcl168
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值