SODA API 未返回数据集中的所有字段

SODA API not returning all fields in data set

我无法从 Socrata 开放数据网络获取数据集中的所有字段。我正在使用 urllib3 发出这样的请求:

url = 'https://data.sfgov.org/resource/g8m3-pdis.json'
http = urllib3.PoolManager(ca_certs=certifi.where())
req = http.request_encode_url('GET', url)


data = json.loads(req.data.decode('utf-8'))

此请求 return 是数据集中除最后 6 个字段之外的所有字段。我试过使用

$select=*,*

指定我想检索哪些字段的语句,但即使我指定了最后 6 个字段,它仍然遗漏了它们。

但是,当我使用

$limit

语句并将其设置为大于 1000 的值 我得到了一些我缺少的字段。但是,还不是全部。

一件有用的事情是指定要抓取的行,所以如果我使用以下内容:

https://data.sfgov.org/resource/g8m3-pdis.json?ttxid=0000028-02-001

它将 return 我要查找的所有字段。

我想我可以请求所有 ttxid 字段,然后为每个字段发送一个单独的请求以获取所有字段,但必须有更好的方法来执行此操作。有人有什么想法吗?

似乎有许多字段经常为空白:locationbusiness_corridorlic_code_description 等。使用 JSON 文档时,Socrata 会省略空白来自响应的字段(不同于 CSV 端点)。

看起来默认调用 https://data.sfgov.org/resource/g8m3-pdis.json 恰好出现在 return 有空白的字段中,因此不会出现。但是,当在默认值 1,000 之上添加 $limit 时,API 恰好 return 一些具有完整数据的行,因此该字段出现在有限的情况下。

这也可以通过抓取不包含所有字段的行来确认。 OP 展示了一个 returned 所有字段的示例:https://data.sfgov.org/resource/g8m3-pdis.json?ttxid=0000028-02-001

但此示例包含空白字段,因此在响应中被省略:https://data.sfgov.org/resource/g8m3-pdis.json?ttxid=1079490-06-161

解决此问题的一种方法是从 CSV 端点获取数据:https://data.sfgov.org/resource/g8m3-pdis.csv