关于json-C的输出格式,请教!

leihelin5201314 2011-03-03 09:09:00
我将数据用json-C格式输出来
	char buffer[500];
memset(buffer,0,500);
struct json_object *data;
data = json_object_new_object();

json_object_object_add(data, "id", json_object_new_string(row[0]));
json_object_object_add(data, "email", json_object_new_string(row[1]));
json_object_object_add(data, "flile", json_object_new_string(row[2]));
json_object_object_add(data, "status", json_object_new_string(row[3]));

strcat(buffer,json_object_to_json_string(data));
strcat(buffer,"\n");


这样输出时是这样的:
{ "id": "423255", "email": "m@163.com", "file": "51959b922d6a19f1c19b6fdf659ab344", "status": "enabled" }
{ "id": "423255", "email": "m@163.com", "file": "51959b922d6a19f1c19b6fdf659ab344", "status": "enabled" }

如果数据有很多条的话
我想将现在的这种
{"domain": 1} {"domain_id": 2}
格式转换为
{{"domain_id": 1} , {"domain_id": 2}}
即把所有的数据都放到一个大括号里边,各项之间用都好隔开,我试过很多次都不行,比如
	struct json_object * data_all;
data_all = json_object_new_object();

然后
json_object_object_add(data_all, ",", json_object_new_string(data));


这样会在中间的逗号处错误,然后直接打不出输出 段错误

向各位大侠请教···


...全文
373 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
leihelin5201314 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 loveanybody 的回复:]

引用 16 楼 iambic 的回复:

搞什么鬼啊,你这根本不是合法的json。要用json就遵守json格式,要不就别用。


我觉得他说的有道理 你的问题应该还是json格式问题 你好好检查一下吧 去看一下别人的json例子吧 我的那个例子是肯定可以用的
[/Quote]呵呵,谢了~
leihelin5201314 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 loveanybody 的回复:]

引用 16 楼 iambic 的回复:

搞什么鬼啊,你这根本不是合法的json。要用json就遵守json格式,要不就别用。


我觉得他说的有道理 你的问题应该还是json格式问题 你好好检查一下吧 去看一下别人的json例子吧 我的那个例子是肯定可以用的
[/Quote]
搞定了,其实是可以合法的实现我那种json格式的:
json_object_array_add(data_all,dal_data);
这样就可以的,这样就是 [{"domain_id": 1} , {"domain_id": 2}] 的格式;
如果要实现像你那样的格式的话,就按下面的方法实现:
json_object_array_add(data_all,json_object_new_string(buffer));
这样就实现你的那样的 [{\""\:\""\,\""\:\""\},{\""\:\""\,\""\:\""\}]的,这两种方法都可以实现的,就看客户端怎么需求了,谢了!
leihelin5201314 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 loveanybody 的回复:]

引用 8 楼 leihelin5201314 的回复:

引用 7 楼 loveanybody 的回复:

中括号里面你可以增加多个大括号表示多段数据 其实你传给客户端 我觉得你还是解析好了 直接已结构的方式丢过去就行了 客户端还不用再处理
如果只有一条数据的话,我直接按照我开始说的发过去就行了,现在有多条数据,要把每条json结构的数据再按照{{``},{``}}的结构装一次发出去,……
[/Quote]
不是···单挑数据发送的没那个 \ ,多条数据需要放在一个大括号内,编译没过去···
loveanybody 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 leihelin5201314 的回复:]

引用 7 楼 loveanybody 的回复:

中括号里面你可以增加多个大括号表示多段数据 其实你传给客户端 我觉得你还是解析好了 直接已结构的方式丢过去就行了 客户端还不用再处理
如果只有一条数据的话,我直接按照我开始说的发过去就行了,现在有多条数据,要把每条json结构的数据再按照{{``},{``}}的结构装一次发出去,我想知道的就是这个第二层结构怎么做
[/Quote]
你的格式是否错了 不是[{\""\:\""\,\""\:\""\},{\""\:\""\,\""\:\""\}]这样的吗?
leihelin5201314 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 loveanybody 的回复:]

中括号里面你可以增加多个大括号表示多段数据 其实你传给客户端 我觉得你还是解析好了 直接已结构的方式丢过去就行了 客户端还不用再处理
[/Quote]json_object_array_add(data_all,dal_data);以数组的方式将他们组合一起我试过,但是那个逗号不知道怎么办,老是出错
leihelin5201314 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 loveanybody 的回复:]

中括号里面你可以增加多个大括号表示多段数据 其实你传给客户端 我觉得你还是解析好了 直接已结构的方式丢过去就行了 客户端还不用再处理
[/Quote]如果只有一条数据的话,我直接按照我开始说的发过去就行了,现在有多条数据,要把每条json结构的数据再按照{{``},{``}}的结构装一次发出去,我想知道的就是这个第二层结构怎么做
loveanybody 2011-03-03
  • 打赏
  • 举报
回复
中括号里面你可以增加多个大括号表示多段数据 其实你传给客户端 我觉得你还是解析好了 直接已结构的方式丢过去就行了 客户端还不用再处理
leihelin5201314 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 loveanybody 的回复:]

JSON 不是自己都封装好了吗? 有lib库 你为什么还要自己再封装一遍呢?
[/Quote]
我需要向客户端输出发送,给的需求是按照这样的格式,但是网上没找到将多条数据组合一起的方法,自己试验了多次也没成功。

另外5楼的方法试过,你的最两边是中括号,需求是大括号···另外发送部分我也需要修改··
loveanybody 2011-03-03
  • 打赏
  • 举报
回复
std::string str1 = "[{\"modelName\":\"RA_表BaseInfo\",\"sectionName\":\"基本信息\",\"RB_表inchinfo-患者所在科室\":\"心外科\",\"RB_表BaseInfo-姓名\":\"王武\",\"RB_表inchinfo-床位号\":\"15\",\"RB_表BaseInfo-性别\":\"男\",\"RB_表BaseInfo-民族\":\"汉\",\"RB_表BaseInfo-籍贯\":\"湖南\",\"RB_表BaseInfo-出生地\":\"长沙市\",\"RB_表inchinfo-工作单位名称\":\"湖南凯歌信息\",\"RB_表inchinfo-入院时年龄\":\"25\",\"RB_表inchinfo-患者职业\":\"工人\",\"RB_表inchinfo-婚姻状况\":\"已婚\",\"RB_表inchinfo-家庭地址\":\"长沙市\",\"RB_表inchinfo-入院日期\":\"2010-12-12\",\"RB_表inchinfo-病案号\":\"00000001\"}]";

Json::Value root;
Json::Reader _reader;
reader.parse(str1,root);

这样root 就解析出来了
loveanybody 2011-03-03
  • 打赏
  • 举报
回复
JSON 不是自己都封装好了吗? 有lib库 你为什么还要自己再封装一遍呢?
leihelin5201314 2011-03-03
  • 打赏
  • 举报
回复
自己顶下····
leihelin5201314 2011-03-03
  • 打赏
  • 举报
回复
没有人知道吗?
loveanybody 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 iambic 的回复:]

搞什么鬼啊,你这根本不是合法的json。要用json就遵守json格式,要不就别用。
[/Quote]

我觉得他说的有道理 你的问题应该还是json格式问题 你好好检查一下吧 去看一下别人的json例子吧 我的那个例子是肯定可以用的
leihelin5201314 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 leihelin5201314 的回复:]

引用 15 楼 loveanybody 的回复:

所以我在想是不是你的结构本来就写出问题了 你可以用中括号中间带大括号数据 你试试
完成了你说的那个中括号的格式,打出来跟你的一样,但是还有个问题就是,这么长的数据我怎么发送到客户端?好几KB估计···
我程序是调用了一个发送函数,
senddata(int client ,char buffer[500])
{
``……
[/Quote]这里的client是表示socket套接字,
leihelin5201314 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 loveanybody 的回复:]

所以我在想是不是你的结构本来就写出问题了 你可以用中括号中间带大括号数据 你试试
[/Quote]完成了你说的那个中括号的格式,打出来跟你的一样,但是还有个问题就是,这么长的数据我怎么发送到客户端?好几KB估计···
我程序是调用了一个发送函数,
senddata(int client ,char buffer[500])
{
``````;
}
但是现在数据的格式是 struct *,而且也不能用buffer[500]了,因为数据很长··这个在发送的时候客户端总是什么都没收到
iambic 2011-03-03
  • 打赏
  • 举报
回复
搞什么鬼啊,你这根本不是合法的json。要用json就遵守json格式,要不就别用。
loveanybody 2011-03-03
  • 打赏
  • 举报
回复
所以我在想是不是你的结构本来就写出问题了 你可以用中括号中间带大括号数据 你试试
leihelin5201314 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 loveanybody 的回复:]

引用 8 楼 leihelin5201314 的回复:

引用 7 楼 loveanybody 的回复:

中括号里面你可以增加多个大括号表示多段数据 其实你传给客户端 我觉得你还是解析好了 直接已结构的方式丢过去就行了 客户端还不用再处理
如果只有一条数据的话,我直接按照我开始说的发过去就行了,现在有多条数据,要把每条json结构的数据再按照{{``},{``}}的结构装一次发出去,……
[/Quote]
为什么我没这个\?
leihelin5201314 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 loveanybody 的回复:]

那我就帮不了你了 因为我JSON 也就才接触才一个月 sorry了 你去国外网站上找点相关内容吧
[/Quote]
谢了,我接触json才三天···
loveanybody 2011-03-03
  • 打赏
  • 举报
回复
那我就帮不了你了 因为我JSON 也就才接触才一个月 sorry了 你去国外网站上找点相关内容吧

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧