json - 如何在 Julia 中将 JSON 文件从 URL 读取到 DataFrame 中?

标签 json dataframe julia

我正在尝试执行以下操作。我有一个链接到包含数字数据的 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/

相关文章:

json - YAJL流解析和Twitter流API

javascript - 基于另一个 JSON 格式的 JavaScript 对象更新

python - 增加行中条件值的计数

python - 根据条件从数据框中删除行

visual-studio-code - 如何在 VSCode for Julia 中获取 Linting

javascript - 在 JavaScript 中解析 Json 数据时出现语法错误

php - 如何删除对象或数组中的递归?

python - 如何计算 Pandas 列中的特殊字符?

Julia 符号微分

optimization - 在 Julia/JuMP 中使用 2 个迭代器进行循环