<printvalue()>




#include <stdio.h>

#include <string.h>

#include "jsmn.h"




void printvalues(const char *json, jsmntok_t *t, int tokcount,int *keys){

int i,j=0;

for(i=0;i<=tokcount;i++){

if(i==keys[j]){

printf("[%d] value:  %.*s\n",j+1,t[i+1].end-t[i+1].start,json+t[i+1].start);

j++;

}

}

}


설명: 다음 함수는 key에 저장된 key token의 번호 데이터를 통해서 token의 위치와 같은 경우 (즉, key token인 경우) 출력하게 하는 함수이다.



    printvalues(JSON_STRING,t,r,keyarray);

    return EXIT_SUCCESS;

}

parsejson.c에 마지막 부분에 추가한 printvalues()함수이다




<Output>







<findkeys()>



#include <stdio.h>

#include <string.h>

#include "jsmn.h"






int findkeys(const char *json, jsmntok_t *t, int tokcount, int * keys){ int i,j=0;

for(i=1;i<tokcount;i++){

if(t[i].size>=1&&t[i].type==3){

keys[j++]=i;

}

}

return j;


}


설며이: 코드는 간단하다. parsing된 token들의 데이터를 토대로 조건문과 반복문을 돌려 size가 1이 이상인경우 그리고 JSMN_STRING인 경우의 token만 keys (parse.c에서는 int array의 argument를 받는다)에 저장하게 된다.




keyamount=findkeys(JSON_STRING,t,r,keyarray);

printall(JSON_STRING,t,r);

printkeys(JSON_STRING,t,r);

printf("Keyamount is %d\n",keyamount);

int b=0;for( b=0;b<keyamount;b++)printf("--> %d\n",keyarray[b]);

return EXIT_SUCCESS;

}


parsejson.c  파일 하단에 findkeys함수와 그 값을 출력하는 값을 출력 하였다. 

<Output>

그럼 다음과 같은 결과 값이 나온다. keyarray에 저장된 array 수는 총 10개이며 각 index에는 parsing된 token의 token번호가 순서대로 저장되어있다.


<printall()>


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "jsmn.h"




void printkeys(const char *json, jsmntok_t *t, int tokcount){

int i=0;

int j=0;

printf("***********All Keys***********");

for(i=1;i<tokcount;i++){

if(t[i].size<1||t[i].type!=3)continue;

else{ j++; 

printf("\n[%d] %.*s (%d)",j,t[i].end-t[i].start,json+t[i].start,i);


}

}

puts("");

}

설명: 해당 함수는 token의 type을 통해서 token이 string인 경우 출력하는 함수이다

하지만, type이 string임에도 key가 아닌 경우가 있다. key가 아닌 내용인 경우 size가 0이기 때문에 그부분도 거른다.

([jsmn]parsing된 token 정보 출력하는 printall함수 page의 output을 보면 알수 있다) 


즉, token이 OBJECT이거나 ARRAY인 경우는 continue를 통해서 출력 제외 대상이 된다



<Output>

괄호안에는 토큰의 순서를 표시한다

예를 들어 keywords는 전체 token의 3번째 token이다



+ Recent posts