字符串格式与级别,我卡住了

时间:2014-02-21 15:53:29

标签: string r

我的下面的字符串需要重新格式化

"itemStockDetailsMap_506540 = {\"506540_Navy\":{\"24DUMMY\":{\"count\":0.0,\"type\":2},\"18DUMMY\":{\"count\":0.0,\"type\":2},\"16DUMMY\":{\"count\":0.0,\"type\":2},\"8DUMMY\":{\"count\":0.0,\"type\":2},\"20DUMMY\":{\"count\":0.0,\"type\":2},\"10DUMMY\":{\"count\":0.0,\"type\":2},\"12DUMMY\":{\"count\":0.0,\"type\":2},\"22DUMMY\":{\"count\":0.0,\"type\":2},\"14DUMMY\":{\"count\":0.0,\"type\":2}},
\"506540_Mocha\":{\"20DUMMY\":{\"count\":0.0,\"type\":2},\"22DUMMY\":{\"count\":0.0,\"type\":2},\"10DUMMY\":{\"count\":0.0,\"type\":2},\"8DUMMY\":{\"count\":0.0,\"type\":2},\"12DUMMY\":{\"count\":0.0,\"type\":2},\"14DUMMY\":{\"count\":0.0,\"type\":2},\"16DUMMY\":{\"count\":0.0,\"type\":2},\"24DUMMY\":{\"count\":0.0,\"type\":2},\"18DUMMY\":{\"count\":0.0,\"type\":2}}
,\"506540_Grey\":{\"18DUMMY\":{\"count\":0.0,\"type\":2},\"12DUMMY\":{\"count\":0.0,\"type\":2},\"10DUMMY\":{\"count\":0.0,\"type\":2},\"20DUMMY\":{\"count\":0.0,\"type\":2},\"14DUMMY\":{\"count\":0.0,\"type\":2},\"22DUMMY\":{\"count\":0.0,\"type\":2},\"24DUMMY\":{\"count\":0.0,\"type\":2},\"16DUMMY\":{\"count\":0.0,\"type\":2},\"8DUMMY\":{\"count\":0.0,\"type\":2}}}"

我想在

中代表它
colour  size   count
Navy    18     0.0
Navy     8     0.0
......
Grey     10    0.0

........

如果有任何很酷的技巧可以重新格式化,请指导我。 非常感谢,

2 个答案:

答案 0 :(得分:2)

假设您的字符串位于变量a

require(rjson)
a <- sub(".*?(\\{.*\\})", "\\1", a)
a <- fromJSON(a)
a <- do.call(rbind, a)
cbind.data.frame(
  colour = rep(sub("\\d+_(\\w+)", "\\1", rownames(a)), each=dim(a)[2]),
  size = as.numeric(rep(sub("(\\d+)\\w+", "\\1", colnames(a)), dim(a)[1])), 
  count = as.numeric(unname(unlist(sapply(a, "[", "count")))))
#    colour size count
# 1    Navy   24     2
# 2    Navy   18     1
# 3    Navy   16     0
# 4    Navy    8     0

答案 1 :(得分:0)

尝试以下方法:

install.packages("rjson")

 # 'yourData' is the JSON string in the OP
 do.call(rbind, lapply(rjson::fromJSON(yourData), function(xx) do.call(rbind, xx)))

        count type
24DUMMY 0     2   
18DUMMY 0     2   
16DUMMY 0     2   
8DUMMY  0     2   
20DUMMY 0     2   
10DUMMY 0     2   
12DUMMY 0     2   
22DUMMY 0     2   
14DUMMY 0     2   
20DUMMY 0     2   
22DUMMY 0     2   
10DUMMY 0     2   
8DUMMY  0     2   
12DUMMY 0     2   
14DUMMY 0     2   
16DUMMY 0     2   
24DUMMY 0     2   
18DUMMY 0     2   
18DUMMY 0     2   
12DUMMY 0     2   
10DUMMY 0     2   
20DUMMY 0     2   
14DUMMY 0     2   
22DUMMY 0     2   
24DUMMY 0     2   
16DUMMY 0     2   
8DUMMY  0     2