cjson解析json文件
时间: 2023-06-21 17:10:47 浏览: 72
cjson是一个轻量级的json解析器,它可以解析json字符串并转换成Lua中的table类型。以下是使用cjson解析json文件的示例代码:
```lua
local cjson = require("cjson")
-- 读取json文件
local file = io.open("example.json", "r")
local content = file:read("*all")
file:close()
-- 解析json字符串
local data = cjson.decode(content)
-- 打印解析结果
for k, v in pairs(data) do
print(k, v)
end
```
其中,io.open()函数用于打开json文件并返回文件句柄,读取文件内容可以使用file:read()函数,"*all"参数表示读取整个文件。解析json字符串可以使用cjson.decode()函数,将json字符串转换成Lua中的table类型。最后,可以使用pairs()函数遍历table并打印解析结果。
相关问题
cjson解读json文件
cJSON是一个轻量级的JSON解析器和生成器,它可以用于解析和生成JSON数据。下面是使用cJSON解析JSON文件的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
int main() {
// 读取JSON文件内容
FILE *file = fopen("example.json", "r");
if (file == NULL) {
printf("Failed to open JSON file.\n");
return 1;
}
fseek(file, 0, SEEK_END);
long fileSize = ftell(file);
fseek(file, 0, SEEK_SET);
char *jsonData = (char *)malloc(fileSize + 1);
fread(jsonData, 1, fileSize, file);
jsonData[fileSize] = '\0';
fclose(file);
// 解析JSON数据
cJSON *root = cJSON_Parse(jsonData); if (root == NULL) {
printf("Failed to parse JSON data.\n");
return 1;
}
// 获取JSON结点的值
cJSON *name = cJSON_GetObjectItem(root, "name");
cJSON *age = cJSON_GetObjectItem(root, "age");
printf("Name: %s\n", name->valuestring);
printf("Age: %d\n", age->valueint);
// 释放内存
cJSON_Delete(root);
free(jsonData);
return 0;
}
```
上述代码首先打开一个JSON文件,然后读取文件内容并解析为cJSON对象。接下来,我们可以使用`cJSON_GetObjectItem`函数根据键获取JSON结点的值。最后,我们打印出获取到的值,并在程序结束时释放内存。
cjson解析json中文乱码
cjson解析json中文乱码的原因通常是编码格式不一致导致的。cjson默认只支持UTF-8编码,如果json文件是其他编码格式(如GB2312),则会出现中文乱码的情况。解决方法是将json文件转换成UTF-8编码格式。
可以使用iconv库进行编码转换,将json文件的编码格式转换成UTF-8。具体代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iconv.h>
#define INBUF_SIZE 1024
int main()
{
char inbuf[INBUF_SIZE];
char outbuf[INBUF_SIZE];
char *in_ptr = inbuf;
char *out_ptr = outbuf;
iconv_t cd = iconv_open("UTF-8", "GB2312");
if (cd == (iconv_t)-1) {
perror("iconv_open");
exit(1);
}
//读取json文件
FILE *fp = fopen("test.json", "rb");
if (fp == NULL) {
perror("fopen");
exit(1);
}
size_t inbytesleft = fread(inbuf, 1, INBUF_SIZE, fp);
size_t outbytesleft = INBUF_SIZE;
//进行编码转换
if (iconv(cd, &in_ptr, &inbytesleft, &out_ptr, &outbytesleft) == (size_t)-1) {
perror("iconv");
exit(1);
}
//输出转换后的json文件
fwrite(outbuf, 1, INBUF_SIZE - outbytesleft, stdout);
fclose(fp);
iconv_close(cd);
return 0;
}
```