首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jsonlite toJSON在对象两边添加多余的引号

jsonlite toJSON在对象两边添加多余的引号
EN

Stack Overflow用户
提问于 2018-06-05 06:47:35
回答 1查看 196关注 0票数 1

我正在与我认为应该是一个简单的问题进行激烈的斗争,而它正在变得令人沮丧。我在R中有一个list对象,其中一些列表项是JSON对象。特别是,我有以下变量:

> dput(node)
structure(list(teamname = "", round = 5, id = 31, seeding = NA_real_, 
    wins = 0, losses = 0, completed = FALSE, r1odds = structure("{\"Rockets\":0.2,\"Timberwolves\":0.01,\"Jazz\":0.04,\"Thunder\":0.03,\"Warriors\":0.25,\"Spurs\":0.02,\"Trail Blazers\":0.07,\"Pelicans\":0.02,\"Raptors\":0.05,\"Wizards\":0.01,\"Cavaliers\":0.12,\"Pacers\":0.04,\"Celtics\":0.04,\"Bucks\":0.02,\"76ers\":0.06,\"Heat\":0.02}", class = "json"), 
    r2odds = structure("{\"Rockets\":0.25,\"Jazz\":0.05,\"Warriors\":0.35,\"Pelicans\":0.07,\"Raptors\":0.06,\"Cavaliers\":0.11,\"Celtics\":0.05,\"76ers\":0.06}", class = "json"), 
    r3odds = structure("{\"Rockets\":0.35,\"Warriors\":0.41,\"Cavaliers\":0.15,\"Celtics\":0.09}", class = "json")), .Names = c("teamname", 
"round", "id", "seeding", "wins", "losses", "completed", "r1odds", 
"r2odds", "r3odds"))


> node
$teamname
[1] ""

$round
[1] 5

$id
[1] 31

$seeding
[1] NA

$wins
[1] 0

$losses
[1] 0

$completed
[1] FALSE

$r1odds
{"Rockets":0.2,"Timberwolves":0.01,"Jazz":0.04,"Thunder":0.03,"Warriors":0.25,"Spurs":0.02,"Trail Blazers":0.07,"Pelicans":0.02,"Raptors":0.05,"Wizards":0.01,"Cavaliers":0.12,"Pacers":0.04,"Celtics":0.04,"Bucks":0.02,"76ers":0.06,"Heat":0.02} 

$r2odds
{"Rockets":0.25,"Jazz":0.05,"Warriors":0.35,"Pelicans":0.07,"Raptors":0.06,"Cavaliers":0.11,"Celtics":0.05,"76ers":0.06} 

$r3odds
{"Rockets":0.35,"Warriors":0.41,"Cavaliers":0.15,"Celtics":0.09} 

> class(node$r2odds)
[1] "json"

请注意,元素$r3odds、$r2odds等在这里属于JSON类。但是,当我运行以下命令时:

jsonlite::toJSON(node, pretty = TRUE, auto_unbox = TRUE)

由于某种原因,它将每个对象值放在引号中:

{
  "teamname": "",
  "round": 5,
  "id": 31,
  "seeding": "NA",
  "wins": 0,
  "losses": 0,
  "completed": false,
  "r1odds": "{\"Rockets\":0.2,\"Timberwolves\":0.01,\"Jazz\":0.04,\"Thunder\":0.03,\"Warriors\":0.25,\"Spurs\":0.02,\"Trail Blazers\":0.07,\"Pelicans\":0.02,\"Raptors\":0.05,\"Wizards\":0.01,\"Cavaliers\":0.12,\"Pacers\":0.04,\"Celtics\":0.04,\"Bucks\":0.02,\"76ers\":0.06,\"Heat\":0.02}",
  "r2odds": "{\"Rockets\":0.25,\"Jazz\":0.05,\"Warriors\":0.35,\"Pelicans\":0.07,\"Raptors\":0.06,\"Cavaliers\":0.11,\"Celtics\":0.05,\"76ers\":0.06}",
  "r3odds": "{\"Rockets\":0.35,\"Warriors\":0.41,\"Cavaliers\":0.15,\"Celtics\":0.09}"
}

而我希望返回的对象看起来像这样:

{
  "teamname": "",
  "round": 5,
  "id": 31,
  "seeding": "NA",
  "wins": 0,
  "losses": 0,
  "completed": false,
  "r1odds":{\"Rockets\":0.2,\"Timberwolves\":0.01,\"Jazz\":0.04,\"Thunder\":0.03,\"Warriors\":0.25,\"Spurs\":0.02,\"Trail Blazers\":0.07,\"Pelicans\":0.02,\"Raptors\":0.05,\"Wizards\":0.01,\"Cavaliers\":0.12,\"Pacers\":0.04,\"Celtics\":0.04,\"Bucks\":0.02,\"76ers\":0.06,\"Heat\":0.02},
  "r2odds":{\"Rockets\":0.25,\"Jazz\":0.05,\"Warriors\":0.35,\"Pelicans\":0.07,\"Raptors\":0.06,\"Cavaliers\":0.11,\"Celtics\":0.05,\"76ers\":0.06},
  "r3odds":{\"Rockets\":0.35,\"Warriors\":0.41,\"Cavaliers\":0.15,\"Celtics\":0.09}
}   

并且优选地不具有对象键周围的所有转义字符。这个是可能的吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 07:04:41

您有一些包含JSON项和非JSON项的列表,toJSON不喜欢这样。首先,我们回到标准的列表结构,然后使用toJSON

library(jsonlite)
library(purrr)
node %>%
  modify_at(8:10,fromJSON) %>%
  toJSON(pretty=TRUE, auto_unbox = TRUE)

# {
#   "teamname": "",
#   "round": 5,
#   "id": 31,
#   "seeding": "NA",
#   "wins": 0,
#   "losses": 0,
#   "completed": false,
#   "r1odds": {
#     "Rockets": 0.2,
#     "Timberwolves": 0.01,
#     "Jazz": 0.04,
#     "Thunder": 0.03,
#     "Warriors": 0.25,
#     "Spurs": 0.02,
#     "Trail Blazers": 0.07,
#     "Pelicans": 0.02,
#     "Raptors": 0.05,
#     "Wizards": 0.01,
#     "Cavaliers": 0.12,
#     "Pacers": 0.04,
#     "Celtics": 0.04,
#     "Bucks": 0.02,
#     "76ers": 0.06,
#     "Heat": 0.02
#   },
#   "r2odds": {
#     "Rockets": 0.25,
#     "Jazz": 0.05,
#     "Warriors": 0.35,
#     "Pelicans": 0.07,
#     "Raptors": 0.06,
#     "Cavaliers": 0.11,
#     "Celtics": 0.05,
#     "76ers": 0.06
#   },
#   "r3odds": {
#     "Rockets": 0.35,
#     "Warriors": 0.41,
#     "Cavaliers": 0.15,
#     "Celtics": 0.09
#   }
# } 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50689781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档