2016-02-25 148 views
2

我想解析JSON文件並將數據存儲在SAS數據集中以下是JSON文件的示例。使用SAS PROC解析Json文件到SAS數據集DS2

現在我只是試圖解析S數組作爲第一步。它有2個對象,所以輸出SAS數據集(最終目標是創建一個哈希表)將有2個觀測值,如下所示。

1 14162 E  NG  1455209 98 
2 14163 EN  NGG 1455210 784 

這是我試過的代碼....但沒有得到任何行。由於DS2是SAS 9.4M3中的新功能,我無法找到很多文檔。我想這是錯誤的"do while (j.ISRIGHTBRACE(tokenType));"但不確定。

proc ds2; 
data Snaps (overwrite=yes); 
dcl package json j(); 
dcl nvarchar(30) Key value; 
dcl varchar(1000000) character set utf8 response; 
dcl int rc; 

dcl package http webQuery(); 
dcl int rc tokenType parseFlags; 
dcl nvarchar(128) token; 
dcl integer i rc; 
drop response rc; 
retain i 0; 

method init(); 
webQuery.createGetMethod('http://XXXXXXXX.com:9090/query?Date=20160211'); 
webQuery.executeMethod(); 
webQuery.getResponseBodyAsString(response, rc); 
rc = j.createParser(response); 
do while (rc = 0); 
    i=i+1; 
    j.getNextToken(rc, token, tokenType, parseFlags); 
    put token=; 
    if lowcase(strip(token)) = 'shots' then do; 
    put 'inside shots =-----------------------------------------'; 
      j.getNextToken(rc, token, tokenType, parseFlags); 
      put '--------------------ARRAY---------------------' token=; 
      if j.ISLEFTBRACKET(tokenType) then do; *Entered in to an Array; 
       j.getNextToken(rc, token, tokenType, parseFlags); 
       put '------------------OBJECT-----------------------' token=; 
       if j.ISLEFTBRACE(tokenType) then do;*Entered in to an Object; 
        do while (j.ISRIGHTBRACE(tokenType)); 
          j.getNextToken(rc, token, tokenType, parseFlags); 
          put '------------------KEY-----------------------' token=; 
          if j.ISSTRING(tokenType) then do; 
               Key=token; 
                j.getNextToken(rc, token, tokenType, parseFlags); 
                put '---------------------VALUE--------------------' token=; 
               Value=token; 
               Output; 

          end; 
        end; 
       end; 
      end; 
    end; 
    if i > 100 then stop; 
end; 

end; * method init; 
method term(); 
    rc = j.destroyParser(); 
end; 

enddata; 
run; 
quit; 

感謝.........

+0

既然你用DS2來做,我假設你已經看過這篇博文:http://blogs.sas.com/content/sasdummy/2015/09/28/parse-json-from-薩斯/。我也必須解析一個JSON文件,這是非常困難的。 SAS只是沒有一個簡單的方法來解析這些......我設法使用數據步進行非常基本的解析,但它不可靠。我讚賞你使用DS2!它非常強大,但是很新,很少有人知道它。 –

+0

@StuSztukowski:是的,那是我偶然發現的第一個使用非常基本的json文件的博客。我的Json結構非常複雜。我在我的問題中粘貼的Json文件只是我們實際Json的一部分。 –

+0

你能提供一個你的JSON文件的完整結構的例子嗎?您提供的樣本非常簡單,可以通過我認爲的數據步驟進行處理,如果沒有這些額外的信息,人們很難再幫助您。 – user667489

回答

2

我試圖解析JSON文件,並在SAS數據集

數據存儲像任何優秀的分析師,這些天知道以您喜歡的處理語言閱讀您的數據是關鍵,但並不總是考慮一個維度。我的答案是通過使用Python將JSON文件轉換爲SAS更簡單的格式,然後轉換爲數據集,例如CSV文件。

以我的線索,從這個reddit的崗位https://www.reddit.com/r/Python/comments/2l3fx9/converting_json_to_csv/

取決於您的平臺,但這樣的事情

在命令行中鍵入「蟒蛇」。如果是安裝轉到3.否則

下載和https://www.python.org/downloads/

安裝Python 2.7版,您可能需要安裝點子,運行 「蟒蛇get-pip.py」 (http://docs.python-guide.org/en/latest/starting/install/win/

在終端(按他們的指令)輸入:$ PIP在終端型安裝-e

現在(根據他們的指令):蟒 json_to_csv_converter.py yelp_academic_dataset.json

文件yelp_academic_dataset.json需要位於當前的 位置。

而正面在這裏你會改變你的JSON文件名稱的yelp_academic_dataset.json。

+0

就此達成一致。還有GROOVY解決方案將JSON轉換爲CSV。如果他們想要完全集成到一個平臺上,人們可以直接通過PROC GROOVY來執行代碼。或者...直接閱讀它! https://communities.sas.com/t5/SAS-Procedures/Parse-json-file-with-Proc-Groovy/td-p/187484 –