我正在尝试执行以下操作。我有一个链接到包含数字数据的 JSON 文件的 url。我想将这些数据读入 DataFrame。我一直遵循建议here关于如何从 url 读取到 JSON 对象。但是,运行此代码后:
resp = HTTP.get("[url here]")
str = String(resp.body) jobj =
JSON.Parser.parse(str)
我收到此错误:
Expected 'r' here
Line: 0
Around: ...timestamp,open,high,lo...
_________^
请注意,此代码确实针对我用来测试它的不同 JSON 文件运行。接下来,在这一步之后,我尝试了以下 this有关如何将 JSON 文件读入 DataFrame 的建议。但是,运行此代码后:
df = DataFrame(jsontable(jobj))
我收到此错误:
MethodError: no method matching read(::Dict{String,Any})
此步骤不适用于我用来测试先前代码的文件。我感谢对上述代码或任何新方法的帮助。另外我应该提到,在数据分析之外的任何编码方面,我都是一个初学者。感谢您的帮助!
编辑:代码的第一部分现在可以正确运行(我的 URL 错误)。当我运行代码的第二部分时,我收到一个新错误。运行后:
df = DataFrame(jsontable(jobj))
我收到错误:
MethodError: no method matching read(::Dict{String,Any})
更新:我最终编写了一个能够解析文件的函数。它只提取其中两列,但目前可以使用。
function json_df_parse(jobj)
timestamp = collect(keys(jobj));close = String[];
for key in timestamp
jobj2 = jobj[key]
push!(close,jobj2["4. close"])
end
df = DataFrame(timestamp = timestamp, close = close)
return df
end
以下是 JSON 文件的示例:
{
"Meta Data": {
"1. Information": "Intraday (1min) open, high, low, close prices and volume",
"2. Symbol": "XXXX",
"3. Last Refreshed": "2021-02-22 20:00:00",
"4. Interval": "1min",
"5. Output Size": "Full size",
"6. Time Zone": "US/Eastern"
},
"Time Series (1min)": {
"2021-02-22 20:00:00": {
"1. open": "4.2800",
"2. high": "4.2800",
"3. low": "4.2800",
"4. close": "4.2800",
"5. volume": "149"
},
"2021-02-22 19:59:00": {
"1. open": "4.2400",
"2. high": "4.2500",
"3. low": "4.2400",
"4. close": "4.2500",
"5. volume": "999"
最佳答案
考虑这个 JSON 文件:
{ "id":[1,2,3],
"vals":[1, 2.1, 3],
"v2":[4.1,null,6.3],
"v3":["7","8",null] }
为了使其可重现,我将其放在 https://szufel.pl/stackoverflowdemo.json 下
现在你可以做:
julia> using DataFrames, JSONTables, HTTP
julia> r = HTTP.get("https://szufel.pl/stackoverflowdemo.json");
julia> df = DataFrame(jsontable(r.body))
3×4 DataFrame
Row │ id vals v2 v3
│ Int64 Real Float64? String?
─────┼─────────────────────────────────
1 │ 1 1 4.1 7
2 │ 2 2.1 missing 8
3 │ 3 3 6.3 missing
关于json - 如何在 Julia 中将 JSON 文件从 URL 读取到 DataFrame 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66339816/