读取JSON文件并将其保存在SAS数据集中

时间:2014-01-14 09:16:58

标签: json sas sas-macro datastep

我正在尝试从JSON文件中读取数据并将值存储在SAS数据集中 这是我的JSON文件 test.json

[
  {
    "id":1,
    "name":"Johnson, Smith and Jones Co.",
    "amount":345.33,
    "Remark":"Pays on time"
  },
  {
    "id":2,
    "name":"Sam, Smith",
    "amount":993.44,
    "Remark":""
  },
  {
    "id":3,
    "name":"Barney & Company",
    "amount":0,
    "Remark":"Great to work with and always pays with cash."
  },
  {
    "id":4,
    "name":"Johnson's Automotive",
    "amount":2344,
    "Remark":""
  }
]

现在我希望输出像简单的SAS数据集一样,我可以作为表格形式获取。 如果我使用proc打印数据集,它将如下所示:

id  name    amount  Remark
1   Johnson, Smith and Jones Co.    345.33  Pays on time
2   Sam, Smith  993.44  
3   Barney & Company    0   Great to work with and always pays with cash.
4   Johnson's Automotive    2344

这是我的方法,但没有得到正确的输出。

LIBNAME src  '/home/user/read_JSON';
filename data '/home/user/read_JSON/test.json';
data src.testdata;
    infile data lrecl = 32000 truncover scanover;
    input @'"id": "' id $255. @'"name": "' name $255. @'"amount": "' amount @'"Remark": "' Remark $255.;
    id = substr(id,1,index(id,'",')-2);
    name = substr( name,1,index( name,'",')-2);
    amount = substr(amount,1,index(amount,'",')-2);
    Remark = substr(Remark,1,index(Remark,'",')-2);
run;

proc print data=src.testdata;
RUN;

任何想法我怎么做???

1 个答案:

答案 0 :(得分:2)

设置firstobs = 3忽略前两行,然后使用/输入修饰符读取下一行。两个尾随/忽略后续的JSON分隔符。

data testdata;
    infile data lrecl=32000 truncover dsd firstobs=3 ;

    input @'"id":' id $255.
        / @'"name":' name $255.
        / @'"amount":' amount
        / @'"Remark":' Remark $255.
        /
        /
    ;
run;