webにも、あんまり細かい事は出ていない
例えば、こんなデータの場合は?
[
{
"RdcsId":"rcmp-r41",
"Status":1,
"NetIdLocal":"kk",
"Agent":null,
"Category":"4WD",
"PlatformRbt":null,
"NowRole":"tk001",
"OsVersion":"4957-v7#1047",
"Role": {
"Execute": "tk001",
"LoadId": [
"tk001", "tk0201", "mv0459"
],
"Status": "Safe"
}
},
{
"RdcsId":"rcmp-r42",
"Status":2,
"NetIdLocal":"kk",
"Agent":null,
"Category":"4WD21",
"PlatformRbt":null,
"NowRole":"tk022",
"OsVersion":"4957-v7#1047",
"Role": {
"Execute": "tk001",
"LoadId": [
"tk001", "tk2222", "mv0459"
],
"Status": "wait"
}
},
{
"RdcsId":"rcmp-r43",
"Status":3,
"NetIdLocal":"l0",
"Agent":null,
"Category":"4WD23",
"PlatformRbt":null,
"NowRole":"tk033",
"OsVersion":"4957-v7#1047",
"Role": {
"Execute": "tk001",
"LoadId": [
"tk001", "tk3333", "mv0459"
],
"Status": "Safe"
}
}
]
こういうデータに対しての使用方法を理解しないと困るので、、、
プログラムを作って、検証した。
で、一応、使い方は理解できたかもという話
インターネット経由のデータ処理が多いけど、プログラムのファイル読み込み部分がcurlのツールになる。
それは、JanssonのTutorialを見ればわかるので、、、
で、結果は、こんな感じで、、、まぁ、自己満足でごめんなさい。
プログラムは、試行錯誤の跡、たっぷり(笑)
あっ
追記:Raspberry Piで、curlモジュール使うとき
sudo apt-get install libcurl4-openssl-dev
Peace!!
-------------- build ------------------------------------gcc tst4.c -o tst4 -ljansson
-------------- program --------------------------------
#include <stdio.h>
#include <jansson.h>
//#define PRS(A) printf("----->%s\n", A)
/************************************************/
int main(int argc, char *argv[])
{
size_t i;
int iCnt;
json_t *root;
json_error_t error;
FILE *outfl;
/********************************************
** check arguments
********************************************/
if(argc != 8){
fprintf(stderr, "usage: %s file dumpfile keyword obj child-obj child-obj-array key\n\n", argv[0]);
return 2;
}
if ((outfl = fopen(argv[2], "w")) == NULL) {
fprintf(stderr, "error: file open.(%s)\n", argv[3]);
return 1;
}
/********************************************
** convert jansson memory data
********************************************/
root = json_load_file(argv[1], 0, &error );
if(!root){
fprintf(stderr, "error: on line %d: %s\n", error.line, error.text);
return 1;
}
// check array data
if(!json_is_array(root)){
fprintf(stderr, "error: root is not an array\n");
json_decref(root);
return 1;
}
iCnt = json_array_size(root);
printf("array counts = %d\n", iCnt);
for(i = 0; i < iCnt; i++){
json_t *data, *value, *obj, *objv, *obj1, *obj11, *obj111;
/*****************************************
** 1. get one object
*****************************************/
// get obj
data = json_array_get(root, i);
json_dumpf(data, outfl, 256);
if(!json_is_object(data)){
fprintf(stderr, "error: data %d is not an object\n", (int)(i + 1));
json_decref(root);
return 1;
}
// get value
value = json_object_get(data, argv[3]);
if(!json_is_string(value)){
fprintf(stderr, "error: obj no. %d: keyword:%s is not a string\n", (int)(i + 1), argv[3]);
return 1;
}
/*****************************************
** 2. get object in object
*****************************************/
// get obj
obj = json_object_get(data, argv[4]);
if(!json_is_object(obj)){
fprintf(stderr, "error: obj %d: is not an object\n", (int)(i + 1));
json_decref(root);
return 1;
}
// get value obj,obj
objv = json_object_get(obj, argv[5]);
if(!json_is_string(objv)){
fprintf(stderr, "error: objv no. %d: keyword:%s is not a string\n", (int)(i + 1), argv[5]);
return 1;
}
/*****************************************
** 3. get array value in object
*****************************************/
// get obj
obj1 = json_object_get(data, argv[6]);
//json_dumpf(obj1, stderr, 256);printf("\n");
if(!json_is_object(obj1)){
fprintf(stderr, "error: obj1 %d: is not an object\n", (int)(i + 1));
json_decref(root);
return 1;
}
// get value obj,obj
obj11 = json_object_get(obj1, argv[7]);
//printf("------------------------\n");
//json_dumpf(obj11, stderr, 256);printf("\n");
if(!json_is_array(obj11)){
fprintf(stderr, "error: obj11 no. %d: keyword:%s is not a object\n", (int)(i + 1), argv[6]);
return 1;
}
obj111 = json_array_get(obj11, 1);
if(!json_is_string(obj111)){
fprintf(stderr, "error: obj111 no. %d: keyword:%s is not a string\n", (int)(i + 1), argv[7]);
return 1;
}
/*****************************************
** 4. print value
*****************************************/
printf("key:%s value:%s obj:%s obj111:%s\n",
argv[3], json_string_value(value), json_string_value(objv),
json_string_value(obj111));
}
/*********************************************
** **
** terminate **
** **
*********************************************/
json_decref(root);
fclose(outfl);
return 0;
}
0 件のコメント:
コメントを投稿