【发布时间】:2023-03-27 06:50:02
【问题描述】:
我想使用 SAS libname JSON 引擎而不是 PROC GROOVY 来导入我从 Twitter API 获得的 JSON 文件。我在 OpenSuse LEAP 42.3 上运行 SAS 9.4M4。
我关注了Falko Schulz's description 如何访问 Twitter API,一切正常。直到我想将 JSON 文件导入 SAS。所以最后一行代码是:
proc http method="get"
out=res headerin=hdrin
url="https://api.twitter.com/1.1/search/tweets.json?q=&TWEET_QUERY.%nrstr(&)count=1"
ct="application/x-www-form-urlencoded;charset=UTF-8";
run;
在文件名“res”引用的文件中生成一个 json 文件。
Falko Schulz 使用 PROC GROOVY。然而,在 SAS 9.4M4 中,有一个神秘的 JSON libname 引擎,它让生活变得更轻松。它适用于简单的 JSON 文件。但不适用于 Twitter 数据。因此,从 Twitter 下载 JSON 数据,使用
libname test JSON filref=res;
给我以下错误:
第 1 行第 751 列附近的输入中的 JSON 无效:某些代码点没有 转码。
我怀疑文件的编码有问题,所以我使用了以下形式的文件名声明:
filename res TEMP encoding="utf-8";
运气不好……
我也尝试增加记录长度
filename res TEMP encoding="utf-8" lrecl=1000000;
并玩弄了记录格式...无济于事...
有人可以帮忙吗?我错过了什么?如何在 LIBNAME 语句中使用 JSON 引擎而不遇到此错误?
【问题讨论】:
-
您的 SAS 会话以什么编码运行? IE,这会返回什么:
proc options option=encoding; run; -
ENCODING=LATIN9,我应该把它改成 UTF-8
-
是的,很有可能这至少是您问题的一部分。大多数 SAS 安装 9.4+ 还自动包含一个 UTF-8 启动选项(它可能是开始菜单/等中的一个单独的快捷方式)
-
谢谢。这解决了它!打扰了!
-
不幸的是,由于 SAS 在处理编码方面的复杂性,这是 SAS 中的一个常见问题;将来可能对其他人有用的问题!