2016-02-25 623 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 –