2014-02-09 20 views
0

我有一個以json格式輸出數據的程序。我想從該程序讀取並解析json數據,然後將自己的變量添加到json對象。一旦我完成文件打開和閱讀,我就不知道如何解析數據。有關如何解析它的任何建議,也許分配一個名稱到新創建的對象?從程序中讀取JSON輸出,然後在C中解析JSON

我在Linux上,在C.

#include <stdio.h> 
#include <json/json.h> 





int main(int argc, char ** argv){ 
printf("Getting Location Data from pipe: \n"); 

FILE *in; 
extern FILE *popen(); 
char gps_stream[4096]; 

if(!(in = popen("gpspipe -w", "r"))){ 
    printf("Cant do it!\n"); 
} 

while(fgets(gps_stream, sizeof(gps_stream), in)!=NULL){ 


json_object * jobj = json_tokener_parse(gps_stream); 


} 
pclose(in); 


} 
+0

你能指定你正在使用哪個JSON解析軟件/庫嗎? – GDICommander

+0

一般而言,您應該獲得JSON解析器包。如果你去json.org有一堆列表,你可以選擇。 (但是請注意,在C和C++中處理JSON是非常棘手的,因爲基本C缺乏處理「映射」和「列表」的數據結構,而C++,Java,Objective-C等在其標準庫中具有這樣的結構。) –

+0

這是我一直在使用的: http://rpm.pbone.net/index.php3/stat/4/idpl/19570900/dir/redhat_el_6/com/json-c-0.10-2.el6 .x86_64.rpm.html#content –

回答

1

寫如果你是這個丟失,請不要寫你自己的JSON解析器。使用其中的一個庫,比如libyajl來爲你做。

+0

實際上,在C++或Objective-C或Qt中,您可以在大約500行代碼中編寫基本解析器(不一定會處理古怪的案例)。但是你必須在香草C中至少再寫出500個,也許是1500個,才能創造配套課程。這是一個有趣的練習,但有其他選擇的時候不是真正有效的。 –

+0

那麼這可能是真的,但這個問題是關於C(不是C++或客觀C是不同的語言) - 請參閱標籤。 Qt不是一種語言,而是一個C++框架,因此與這個問題無關。看到有人試圖用C語言寫C語言的JSON解析器,我可以告訴你最好是使用預先存在的庫。 – abligh

+0

對。如果你知道這種語言,這不是什麼大不了的事情,但如果不是,那麼你會從多個角度惹上麻煩。 –