将JavaScript对象数组转换为R编程语言中的JSON。

huangapple go评论100阅读模式
英文:

Convert JavaScript array of objects to JSON in r programming language

问题

我需要将 JSON 对象传递给 R 编程中的一个函数。以下是可以传递的各种 JavaScript 对象示例,需要在 R 中将它们转换为 JSON。

  1. Example1 = [
  2. {name: "Orange", data: {"Tuesday": 3, "Friday": 4}, stack: "fruit"},
  3. {name: "Apple", data: {"Tuesday": 1, "Friday": 8}, stack: "fruit"},
  4. {name: "Cucumber", data: {"Tuesday": 3, "Friday": 4}, stack: "vegetable"},
  5. {name: "Carrot", data: {"Tuesday": 1, "Friday": 8}, stack: "vegetable"}
  6. ]
  7. Example2 = [["Washington", "1789-04-29", "1797-03-03"], ["Adams", "1797-03-03", "1801-03-03"]]

我需要使用 jsonlite 包将它们转换为 R 中的 JSON 对象。

英文:

I need to pass JSON object to a function in r programming. The following are the various examples of JavaScript objects that can be passed which needed to be converted to JSON in r

  1. Example1 = [
  2. {name: "Orange", data: {"Tuesday": 3, "Friday": 4}, stack: "fruit"},
  3. {name: "Apple", data: {"Tuesday": 1, "Friday": 8}, stack: "fruit"},
  4. {name: "Cucumber", data: {"Tuesday": 3, "Friday": 4}, stack: "vegetable"},
  5. {name: "Carrot", data: {"Tuesday": 1, "Friday": 8}, stack: "vegetable"}
  6. ]
  7. Example2 = [["Washington", "1789-04-29", "1797-03-03"], ["Adams", "1797-03-03", "1801-03-03"]]

I need help converting them into a JSON object in r using jsonlite package.

答案1

得分: 0

  1. JavaScript代码可以使用`v8`进行评估,该代码可以包括`JSON.stringify()`,但对于一系列简单的赋值表达式,我们可以为`$eval()`方法设置`serialize`参数,它将返回JSON字符串:
  2. library(V8)
  3. #> 使用V8引擎9.1.269.38
  4. js <- c(
  5. ex1 = ''Example1 = [
  6. {name: "Orange", data: {"Tuesday": 3, "Friday": 4}, stack: "fruit"},
  7. {name: "Apple", data: {"Tuesday": 1, "Friday": 8}, stack: "fruit"},
  8. {name: "Cucumber", data: {"Tuesday": 3, "Friday": 4}, stack: "vegetable"},
  9. {name: "Carrot", data: {"Tuesday": 1, "Friday": 8}, stack: "vegetable"}
  10. ]'',
  11. ex2 = ''Example2 = [["Washington", "1789-04-29", "1797-03-03"], ["Adams", "1797-03-03", "1801-03-03"]]''
  12. )
  13. ctx <- v8()
  14. # 评估并序列化js返回对象
  15. json_1 <- ctx$eval(js[1], serialize = TRUE)
  16. jsonlite::validate(json_1)
  17. #> [1] TRUE
  18. json_1
  19. #> [1] "[{\"name\":\"Orange\",\"data\":{\"Tuesday\":3,\"Friday\":4},\"stack\":\"fruit\"},{\"name\":\"Apple\",\"data\":{\"Tuesday\":1,\"Friday\":8},\"stack\":\"fruit\"},{\"name\":\"Cucumber\",\"data\":{\"Tuesday\":3,\"Friday\":4},\"stack\":\"vegetable\"},{\"name\":\"Carrot\",\"data\":{\"Tuesday\":1,\"Friday\":8},\"stack\":\"vegetable\"}]"
  20. # 或者在表达式列表上应用ctx$eval()
  21. json_lst <- lapply(js, ctx$eval, serialize = TRUE)
  22. str(json_lst)
  23. #> 2个元素的列表
  24. #> $ ex1: chr "[{\"name\":\"Orange\",\"data\":{\"Tuesday\":3,\"Friday\":4},\"stack\":\"fruit\"},{\"name\":\"Apple\",\"data\":{"| __truncated__
  25. #> $ ex2: chr "[[\"Washington\",\"1789-04-29\",\"1797-03-03\"],[\"Adams\",\"1797-03-03\",\"1801-03-03\"]]"
英文:

Javascript code can be evaluated with v8, that code can include JSON.stringify(), but for a list of simple assignment expressions we can set serialize parameter for $eval() method and it will return JSON string:

  1. library(V8)
  2. #> Using V8 engine 9.1.269.38
  3. js <- c(
  4. ex1 = 'Example1 = [
  5. {name: "Orange", data: {"Tuesday": 3, "Friday": 4}, stack: "fruit"},
  6. {name: "Apple", data: {"Tuesday": 1, "Friday": 8}, stack: "fruit"},
  7. {name: "Cucumber", data: {"Tuesday": 3, "Friday": 4}, stack: "vegetable"},
  8. {name: "Carrot", data: {"Tuesday": 1, "Friday": 8}, stack: "vegetable"}
  9. ]',
  10. ex2 = 'Example2 = [["Washington", "1789-04-29", "1797-03-03"], ["Adams", "1797-03-03", "1801-03-03"]]'
  11. )
  12. ctx <- v8()
  13. # evaluate and serialize js return object
  14. json_1 <- ctx$eval(js[1], serialize = TRUE)
  15. jsonlite::validate(json_1)
  16. #> [1] TRUE
  17. json_1
  18. #> [1] "[{\"name\":\"Orange\",\"data\":{\"Tuesday\":3,\"Friday\":4},\"stack\":\"fruit\"},{\"name\":\"Apple\",\"data\":{\"Tuesday\":1,\"Friday\":8},\"stack\":\"fruit\"},{\"name\":\"Cucumber\",\"data\":{\"Tuesday\":3,\"Friday\":4},\"stack\":\"vegetable\"},{\"name\":\"Carrot\",\"data\":{\"Tuesday\":1,\"Friday\":8},\"stack\":\"vegetable\"}]"
  19. # or apply ctx$eval() on the the list of expressions
  20. json_lst <- lapply(js, ctx$eval, serialize = TRUE)
  21. str(json_lst)
  22. #> List of 2
  23. #> $ ex1: chr "[{\"name\":\"Orange\",\"data\":{\"Tuesday\":3,\"Friday\":4},\"stack\":\"fruit\"},{\"name\":\"Apple\",\"data\":{"| __truncated__
  24. #> $ ex2: chr "[[\"Washington\",\"1789-04-29\",\"1797-03-03\"],[\"Adams\",\"1797-03-03\",\"1801-03-03\"]]"

<sup>Created on 2023-07-23 with reprex v2.0.2</sup>

答案2

得分: 0

为了获得一个“真正的”JSON字符串,您可以使用jsonNormalize包。

  1. library(jsonNormalize)
  2. jsonNormalize(
  3. '[
  4. {name: "Orange", data: {"Tuesday": 3, "Friday": 4}, stack: "fruit"},
  5. {name: "Apple", data: {"Tuesday": 1, "Friday": 8}, stack: "fruit"},
  6. {name: "Cucumber", data: {"Tuesday": 3, "Friday": 4}, stack: "vegetable"},
  7. {name: "Carrot", data: {"Tuesday": 1, "Friday": 8}, stack: "vegetable"}
  8. ]', prettify = TRUE)
  1. [
  2. {
  3. "name": "Orange",
  4. "data": {
  5. "Tuesday": 3,
  6. "Friday": 4
  7. },
  8. "stack": "fruit"
  9. },
  10. {
  11. "name": "Apple",
  12. "data": {
  13. "Tuesday": 1,
  14. "Friday": 8
  15. },
  16. "stack": "fruit"
  17. },
  18. {
  19. "name": "Cucumber",
  20. "data": {
  21. "Tuesday": 3,
  22. "Friday": 4
  23. },
  24. "stack": "vegetable"
  25. },
  26. {
  27. "name": "Carrot",
  28. "data": {
  29. "Tuesday": 1,
  30. "Friday": 8
  31. },
  32. "stack": "vegetable"
  33. }
  34. ]

jsonNormalize包还提供了一个RStudio插件,允许通过点击按钮来规范化json文件。

英文:

To have a "true" JSON string, you can use the jsonNormalize package.

  1. library(jsonNormalize)
  2. jsonNormalize(
  3. &#39;[
  4. {name: &quot;Orange&quot;, data: {&quot;Tuesday&quot;: 3, &quot;Friday&quot;: 4}, stack: &quot;fruit&quot;},
  5. {name: &quot;Apple&quot;, data: {&quot;Tuesday&quot;: 1, &quot;Friday&quot;: 8}, stack: &quot;fruit&quot;},
  6. {name: &quot;Cucumber&quot;, data: {&quot;Tuesday&quot;: 3, &quot;Friday&quot;: 4}, stack: &quot;vegetable&quot;},
  7. {name: &quot;Carrot&quot;, data: {&quot;Tuesday&quot;: 1, &quot;Friday&quot;: 8}, stack: &quot;vegetable&quot;}
  8. ]&#39;, prettify = TRUE)
  1. [
  2. {
  3. &quot;name&quot;: &quot;Orange&quot;,
  4. &quot;data&quot;: {
  5. &quot;Tuesday&quot;: 3,
  6. &quot;Friday&quot;: 4
  7. },
  8. &quot;stack&quot;: &quot;fruit&quot;
  9. },
  10. {
  11. &quot;name&quot;: &quot;Apple&quot;,
  12. &quot;data&quot;: {
  13. &quot;Tuesday&quot;: 1,
  14. &quot;Friday&quot;: 8
  15. },
  16. &quot;stack&quot;: &quot;fruit&quot;
  17. },
  18. {
  19. &quot;name&quot;: &quot;Cucumber&quot;,
  20. &quot;data&quot;: {
  21. &quot;Tuesday&quot;: 3,
  22. &quot;Friday&quot;: 4
  23. },
  24. &quot;stack&quot;: &quot;vegetable&quot;
  25. },
  26. {
  27. &quot;name&quot;: &quot;Carrot&quot;,
  28. &quot;data&quot;: {
  29. &quot;Tuesday&quot;: 1,
  30. &quot;Friday&quot;: 8
  31. },
  32. &quot;stack&quot;: &quot;vegetable&quot;
  33. }
  34. ]

The jsonNormalize package also provides a RStudio addin allowing to normalize a json file by pressing a button.

huangapple
  • 本文由 发表于 2023年7月23日 16:12:21
  • 转载请务必保留本文链接:https://go.coder-hub.com/76747240.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定