首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用jansson提取无键JSON数据

用jansson提取无键JSON数据
EN

Stack Overflow用户
提问于 2014-01-03 01:21:11
回答 1查看 5K关注 0票数 3

我想从一个JSON文件中提取值,该文件的值前面没有键描述符,但是值只是用冒号分隔。

这是我所得到的输入类型的一个例子:

代码语言:javascript
复制
{"out":[[0.2,15],[0.5,3.3],[0.1,46.8]],"in":[[0.6,20.2],[0.04,66.654],[0.0124,1.5]]}

我不能使用或一些类似的函数,因为它们都需要密钥,这是不存在的。如果存在詹森中包含的函数,您能为我指出一种简洁的方法来做到这一点吗?如果我必须手动完成它,我将非常感谢一个代码片段。

提前谢谢你,

blue_lagoon

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-03 09:52:53

示例

代码语言:javascript
复制
#include <stdio.h>
#include <jansson.h>

int main(void){
    char text[] = "{\"out\":[[0.2,15],[0.5,3.3],[0.1,46.8]],\"in\":[[0.6,20.2],[0.04,66.654],[0.0124,1.5]]}";
    json_error_t error;
    json_t *root;
    json_t *in, *out, *obj;
    json_t *array, *element;
    double value;
    const char *key;
    int i, j;
    root = json_loads(text, 0, &error);
    if(!root){
        fprintf(stderr, "error : root\n");
        fprintf(stderr, "error : on line %d: %s\n", error.line, error.text);
        exit(1);
    }
    in = json_object_get(root, "in");
    if(!json_is_array(in)){
        printf("NG1\n");
    }
    array = json_array_get(in, 1);
    if(!json_is_array(array)){
        fprintf(stderr,"NG2\n");
    }
    element = json_array_get(array, 1);
    value = json_real_value(element);
    printf("%f\n", value);//66.654000

    out = json_object_get(root, "out");
    array = json_array_get(out, 2);
    json_array_foreach(array, i, element){
        value = json_real_value(element);
        printf("%f ", value);//0.100000 46.800000
    }
    printf("\n");

    json_object_foreach(root, key, obj){
        printf("%s:\n", key);
        json_array_foreach(obj, i, array){
            json_array_foreach(array, j, element){
                value = json_number_value(element);//json_real_value NG for 15 
                printf("%f ", value);
            }
            printf("\n");
        }
        printf("\n");
    }
/*
out:
0.200000 15.000000
0.500000 3.300000
0.100000 46.800000

in:
0.600000 20.200000
0.040000 66.654000
0.012400 1.500000
*/
    return 0;
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20894946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档