很多时候我们需要json格式来存储数组,有可能是对象的数组,也可能是基本变量的数组,如果是对象数组的话,就需要在“简单读法”中的ParseJSON方法中添加一些对对象的申请和对链表的操作才能完成你想要的数据结构!
当然另一种比较常用的用法是:只有“值”,没有“键”的数组,比如 ["value1","value2","value3"],这种格式是常用于socket链接中与服务器通信的,下面就分别写一个解析和格式化的两种方式:
a.解析
当然还是需要一个解析的函数用来输出和递归用的
[cpp]
<span style="font-size:16px;">void parseArrJSON(JSONNODE *n)
{
if (n == NULL)
{
CCLOG("Invalid JSON Node\n");
return;
}
// Parser
JSONNODE_ITERATOR it = json_begin(n);
while (it != json_end(n)) {
if (*it == NULL) {
CCLOG("Invalid JSON Node\n");
return;
}
if (json_type(*it) == JSON_ARRAY || json_type(*it) == JSON_NODE) {
parseArrJSON(*it);
}
else {
// 如果只是值没有键,则只需要获取即可
json_char *value = json_as_string(*it);
CCLOG("%s", value);
json_free(value);
}
++it;
}
}
</span>
<span style="font-size:16px;">void parseArrJSON(JSONNODE *n)
{
if (n == NULL)
{
CCLOG("Invalid JSON Node\n");
return;
}
// Parser
JSONNODE_ITERATOR it = json_begin(n);
while (it != json_end(n)) {
if (*it == NULL) {
CCLOG("Invalid JSON Node\n");
return;
}
if (json_type(*it) == JSON_ARRAY || json_type(*it) == JSON_NODE) {
parseArrJSON(*it);
}
else {
// 如果只是值没有键,则只需要获取即可
json_char *value = json_as_string(*it);
CCLOG("%s", value);
json_free(value);
}
++it;
}
}
</span>用法很简单
[cpp]
<span style="font-size:16px;">char *arrJson = "[\"value1\",\"value2\",\"value3\"]";
JSONNODE *an = json_parse(arrJson);
parseArrJSON(an);
json_delete(an);</span>
<span style="font-size:16px;">char *arrJson = "[\"value1\",\"value2\",\"value3\"]";
JSONNODE *an = json_parse(arrJson);
parseArrJSON(an);
json_delete(an);</span>
b.格式化
也就是拼接json字符串了