使用SAS PROC DS2将Json文件解析为SAS数据集

时间:2016-02-25 21:39:58

标签: sas sas-ds2

我正在尝试解析JSON文件并将数据存储在SAS数据集中以下是JSON文件的示例。

现在我只是尝试解析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;

感谢.........

1 个答案:

答案 0 :(得分:2)

  

我正在尝试解析JSON文件并将数据存储在SAS数据集

像现在任何优秀的分析师一样,用您首选的处理语言读取数据是很关键的,但并不总是考虑一个维度。我的答案是使用Python将JSON文件转换为更简单的SAS格式,然后转换为数据集,例如CSV文件。

从这篇reddit帖子https://www.reddit.com/r/Python/comments/2l3fx9/converting_json_to_csv/

中获取提示
  

取决于您的平台,但有类似的内容

     

在命令行类型'python'。如果已安装,请转到3.否则

     

https://www.python.org/downloads/

下载并安装python 2.7      

您可能需要安装pip,运行“python get-pip.py”   (http://docs.python-guide.org/en/latest/starting/install/win/

     

在终端(按照他们的说明)输入:$ pip install -e

     

现在在终端类型(根据他们的指示):python   json_to_csv_converter.py yelp_academic_dataset.json

     

文件yelp_academic_dataset.json需要在您当前   位置。

在这里,您可以使用您的JSON文件名更改yelp_academic_dataset.json。