+
 新版
2015-11-17 16:08
新功能想用rapidjson,但是不支持注释就不行了
2015-11-15 23:21

引用来自“calvinwilliams”的评论

rapidjson出新版了?我去试试先。

好奇的问下,在你的环境里,解析一个json报文,作为一条记录插入数据库,需要手工编写代码是怎么样的?我的写法已经在前面演示了。

我现在倒是觉得c语言搞开发,更关注的应该是开发效率和稳定性吧(运行效率可以通过分布式架构来更有效的提高),大量分配内存、大量操作指针、解析json插入数据库需要手工编写大量代码,都不是好的开发方式和工具风格,你说呢 ^_^ 望互相学习互相提高
来晚了 说的太好了 目前 云计算求稳求低能耗 拿着别人的Xmalloc去炫技 很容易穿帮
2015-05-02 22:25

引用来自“calvinwilliams”的评论

http://git.oschina.net/calvinwilliams/fasterjson/blob/master/README-CN

国产原创的C语言接口的fasterjson+DirectStruct含笑不语
表示关注!
2015-04-30 21:12
关于 RapidJson 的测试代码我直接用的是你项目里面的代码,并未采用Insitu方式,同时我也发现了,那个memcpy是完全没必要的,不涉及公平或不公平,我代码里面也有注释的代码,注释与否,结论都差不多,影响不大。

另外,关于测试集,我用的也是你原本的测试集,对于test_big2.json,不是RapidJson不能解析,而是RapidJson不支持 // 和 /* */ 的注释,所以把前面的注释移除就可以测试了。
2015-04-30 16:32
我说怎么内存的横轴还是时间呢??
2015-04-30 16:31
时间和内存俩图重复了!!!
2015-04-29 21:48
一直用json-C的路过。。。
2015-04-29 10:49
只用cjson
2015-04-29 10:43
一直用cJson,性能上的差异,工作中没体会到有多大
2015-04-29 00:01
看上去不错 不过我一般自己写写用用就行了 反正也没几行代码 懒得去整第三方库
2015-04-28 21:59
有心不错
2015-04-28 19:40

引用来自“calvinwilliams”的评论

fasterjson快的主要原因是:内部无任何内存分配;很多内部函数调用改成宏展开,代码极端优化。

某银行内部大量采用,性能杠杠的。

引用来自“shines77”的评论

其实RapidJson也提供这种做法的, 叫做原位解析Insitu, 即是测试图里面的RapidJson_Insitu. 你的代码粗略看了一下, 并没有什么特别可取的地方, 相反, 有不少冗余的东西.

引用来自“calvinwilliams”的评论

好吧,我的代码没有什么特别可取的地方, 有不少冗余的东西 -_-!!!
别伤心 编码问题还没搞
2015-04-28 19:38

引用来自“calvinwilliams”的评论

fasterjson快的主要原因是:内部无任何内存分配;很多内部函数调用改成宏展开,代码极端优化。

某银行内部大量采用,性能杠杠的。

引用来自“shines77”的评论

其实RapidJson也提供这种做法的, 叫做原位解析Insitu, 即是测试图里面的RapidJson_Insitu. 你的代码粗略看了一下, 并没有什么特别可取的地方, 相反, 有不少冗余的东西.
好吧,我的代码没有什么特别可取的地方, 有不少冗余的东西 -_-!!!
2015-04-28 19:27
rapidjson出新版了?我去试试先。

好奇的问下,在你的环境里,解析一个json报文,作为一条记录插入数据库,需要手工编写代码是怎么样的?我的写法已经在前面演示了。

我现在倒是觉得c语言搞开发,更关注的应该是开发效率和稳定性吧(运行效率可以通过分布式架构来更有效的提高),大量分配内存、大量操作指针、解析json插入数据库需要手工编写大量代码,都不是好的开发方式和工具风格,你说呢 ^_^ 望互相学习互相提高
2015-04-28 19:07

引用来自“Abeldu”的评论

RapidJSON软文~~

引用来自“MiloYip”的评论

花这么多时间去测试,给出数据,然后说是软文?
哈哈,别在意这个,个别人而已
2015-04-28 19:06
一直用jsoncpp
2015-04-28 19:03
代码框架如下:
court_shixin_person   person ;
fp = fopen( p_task->pathfilename , "r" ) ;
...
nret = fread( filebuffer , 1 , sizeof(filebuffer) , fp ) ;
...
memset( & person , 0x00 , sizeof(court_shixin_person) );
nret = DSCDESERIALIZE_JSON_court_shixin_person( NULL , bufferptr , & nret , & person ) ;
...
strcpy( person.update_flag , "1" ); /* 新增 */
DSCSQLACTION_INSERT_INTO_court_shixin_person( & person );
...
怎么样,用c语言处理json数据是不是和java一样便捷?从c结构体打包成json报文也一样只要调个函数即可 ^_^

目前fasterjson只支持GBK编码,UTF8未验证,后面会验证并支持。
2015-04-28 18:57
我举个我们生产在用的例子吧 ^_^
为了解析如下json数据
{"id":876500,"iname":"李**","caseCode":"(2014)秦执字第02203号","age":34,"sexy":"男",...

我先编写dsc定义文件
STRUCT  court_shixin_person
{
  INT  4  id    NOTNULL  # 序号
  STRING  128  iname      # 被执行人姓名
  STRING  256  caseCode    # 案号
  INT  4  age      # 年龄
  STRING  4  sex      # 性别
...
  SQLACTION  "INSERT INTO court_shixin_person"
...

使用工具处理该文件
dsc -f IDL_court_shixin_person.dsc -c -c-LOG -c-json -sql-pgsql -ec-pgsql
自动生成了很多代码,我在我的应用代码里直接调用自动生成的解析json函数到c结构体,再调用从c结构体插入到数据库表函数,就能完成从解析json报文到入数据库,我所写的程序仅仅调用了两个前面自动生成好的函数。
nret = DSCDESERIALIZE_JSON_court_shixin_person( NULL , bufferptr , & nret , & person ) ;
...
DSCSQLACTION_INSERT_INTO_court_shixin_person( & person );
2015-04-28 18:42
强大的c结构体工具DirectStruct介绍
http://git.oschina.net/calvinwilliams/DirectStruct/blob/master/README-CN

写一个dsc定义文件,用工具dsc处理之,自动生成调用fasterjson的自动化代码,包含c结构体定义、c结构体与json报文之间互相转换的函数,用户程序操作json数据变成了只操作c结构体变量即可,没有漫天飞的指针。漫天飞的指针恰恰是其它开源json解析库的通病,大量使用指针可是对c程序员的考验啊,呵呵。
2015-04-28 18:35
这可能是设计层面上的更优化考量,提示数据和提取数据分层的好处是,我可以使用我自己的内存管理函数库来提取数据,而不一定用malloc,否则就和malloc绑死了,缺乏应用场景多样化的适应性。之前选型时就是因为行里有自己的内存管理机制,而哪些开源json解析库都只支持malloc,而放弃。分层的坏处是带来使用复杂性,所以后来改造了伴侣工具DirectStruct,让工具自动生成fasterjson代码,即提供了灵活性,又提高的便捷性。
2015-04-28 18:31

引用来自“Abeldu”的评论

RapidJSON软文~~

引用来自“MiloYip”的评论

花这么多时间去测试,给出数据,然后说是软文?
别计较,貌似微软有几个项目就用了你的RapidJSON
2015-04-28 18:31

引用来自“calvinwilliams”的评论

在fasterjson内部,数字按字符串解析。

为了提高性能,fasterjson只提示数据的位置和长度,用户程序按需自行提取,而不是无论用户要不要数据,都提取出来,所以fasterjson本身不用处理转义符,但是头文件中也包含了处理转义符的宏,用户可根据情况额外调用。
具体可参见fasterjson的伴侣工具DirectStruct的自动生成的代码。

我们的目标是:让c语言环境处理json格式数据方便到极致。
这是一种lazy parsing,而且是non-validating,但这种做法无法与一般的parser做客观比较。

看到代码里用了strchr()等API,建议改写来提高性能。
2015-04-28 18:30

引用来自“calvinwilliams”的评论

fasterjson快的主要原因是:内部无任何内存分配;很多内部函数调用改成宏展开,代码极端优化。

某银行内部大量采用,性能杠杠的。

引用来自“MiloYip”的评论

如果不符合标准,那么性能是无意义的。
也搞个RapidIni呗,支持多编码,Ini做语言文件比较省,解析起来比较快
2015-04-28 18:27

引用来自“Abeldu”的评论

RapidJSON软文~~
花这么多时间去测试,给出数据,然后说是软文?
2015-04-28 18:25
在fasterjson内部,数字按字符串解析。

为了提高性能,fasterjson只提示数据的位置和长度,用户程序按需自行提取,而不是无论用户要不要数据,都提取出来,所以fasterjson本身不用处理转义符,但是头文件中也包含了处理转义符的宏,用户可根据情况额外调用。
具体可参见fasterjson的伴侣工具DirectStruct的自动生成的代码。

我们的目标是:让c语言环境处理json格式数据方便到极致。
2015-04-28 18:16

引用来自“calvinwilliams”的评论

fasterjson快的主要原因是:内部无任何内存分配;很多内部函数调用改成宏展开,代码极端优化。

某银行内部大量采用,性能杠杠的。
如果不符合标准,那么性能是无意义的。
2015-04-28 18:04
屌。。。
2015-04-28 18:03
fasterjson快的主要原因是:内部无任何内存分配;很多内部函数调用改成宏展开,代码极端优化。

某银行内部大量采用,性能杠杠的。
2015-04-28 17:49
妈蛋,一个也没见过。
2015-04-28 17:38
在使用STL实现的情况下,在win上的性能差距会让你们大跌眼镜的。
2015-04-28 17:21

引用来自“Abeldu”的评论

RapidJSON软文~~
好眼力
2015-04-28 17:14
c/c++ 这点确实烦人,太多不知怎么选择。

go 就是自带标准库,省心。
2015-04-28 17:08
RapidJSON软文~~
2015-04-28 17:02
rapidJson综合看还算不错
2015-04-28 16:26
我还以为strdup是嘛玩意
2015-04-28 16:25
To measure the overheads of the benchmark process, a strdup test is added for comparison. It simply allocate and copy the input string in Parse and Stringify benchmark.
2015-04-28 16:18

引用来自“尾鱼头”的评论

strdup是个什么玩意
strdup只是一个拷贝函数
2015-04-28 15:59
strdup是个什么玩意
2015-04-28 15:55
gason和strdup看来很不错呀
2015-04-28 15:30
C卄码农太苦逼了, 找个json库都这么废脑筋...
2015-04-28 15:28
还是strdup叼
2015-04-28 15:27
要是能捣鼓个C的适配就好了,项目大部分都是C的
2015-04-28 15:03
测试的好仔细啊
2015-04-28 14:58
这个牛逼啊!!!
回复 @
{{emojiItem.symbol}}
返回顶部
顶部