gpt4 book ai didi

python - R 中的 Python "json.dumps()"等效吗?

转载 作者:行者123 更新时间:2023-12-01 04:10:44 24 4
gpt4 key购买 nike

我是 R 的初学者(仍在 Coursera 上学习“R 编程”类(class)),我正在尝试练习 R 将一些简单的代码从 Python 移植到 R。

目前我正在尝试对 KairosDB database 进行 API 调用。为了进行查询,我需要使用 json.dumps() (来自 json native 库)对 Python 对象进行编码,但我已经搜索了很多并且我不明白如何使用 R 及其 jsonlite 库来做到这一点。我什至不知道我是否正确创建了 JSON 对象,但这就是我在一些搜索中发现的。

我用 Python 3 编写的代码 ( from this repo ):

import requests
import json

kairosdb_server = "http://localhost:8080"

# Simple test
query = {
"start_relative": {
"value": "4",
"unit": "years"
},
"metrics": [
{
"name": "test",
"limit": 10000
}
]
}
response = requests.post(kairosdb_server + "/api/v1/datapoints/query", data=json.dumps(query))
print("Status code: %d" % response.status_code)
print("JSON response:")
print(response.json())

我当前用 R 3.2.3 编写的代码:

library(httr)
library(jsonlite)

kairosdb_server <- 'http://localhost:8080'

query <- serializeJSON(toJSON('
"start_relative": {
"value": "4",
"unit": "years"
},
"metrics": [
{
"name": "test",
"limit": 1000
}
]
'))

url <- paste(kairosdb_server, '/api/v1/datapoints/query')
response <- POST(url, body = query, encode = 'json')

print(paste("Query status code: ", response$status_code))
print(paste("JSON response: \n", content(response, type = 'application/json')))

如果我运行,我会收到以下错误:

print(paste("Query status code: ", response$status_code))
# [1] "Query status code: 400"

print(paste("JSON response: \n", content(response, type = 'application/json')))
# [1] "JSON response: \n list(\"query.metric[] must have a size of at least 1\")"

我做错了什么?

最佳答案

通常情况下,人们会将一个命名的list传递到body中,但尝试让R将数组保留在“metrics”中是很棘手的。既然你已经有了带有原始 Python 结构的 JSON,为什么不直接添加括号并将其作为字符向量传递呢?即

query <- '{"start_relative": {
"value": "4",
"unit": "years"
},
"metrics": [
{
"name": "test",
"limit": 10000
}
]}'

(然后只需在 POST 中使用该查询)。它与 json.dumps() 输出的 JSON 等效:

# get rid of newlines and spaces just to show they are the same, 
# the server won't (shouldn't) care if there are newlines/spaces
cat(gsub(" \\]", "]", gsub("\\[ ", "[", gsub(" \\}", "}", gsub("\\{ ", "{", gsub("\ +", " ", gsub("\\n", "", query)))))))
{"start_relative": {"value": "4", "unit": "years"}, "metrics": [{"name": "test", "limit": 10000}]}

# python
json.dumps(query)
'{"metrics": [{"limit": 10000, "name": "test"}], "start_relative": {"unit": "years", "value": "4"}}'

如果您确实需要使用 R 数据结构,那么您最终将需要操作 toJSON 的输出。

关于python - R 中的 Python "json.dumps()"等效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34983972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com