2017-01-18 2 views
1

ich eine JSON-Datei in R. Zum Beispiel erzeugen möchten:Hinzufügen von Linien in eine JSON-Datei erzeugt in R

forJson <- data.frame(names = c("John", "Mary", "Pat", "Rick"), values = 3:6) 
library("jsonlite") 
toJson <- toJSON(forJson, pretty = TRUE) 
toJson 

Ich bin jedoch erforderlich, um einige Informationen zu dieser Datei hinzuzufügen. Am Ende sollte es so aussehen:

[ 
"CaseID": 12345, 
"graph": "Name-of-the-graph", 
"Items":[{ 

    { 
    "names": "John", 
    "values": 3 
    }, 
    { 
    "names": "Mary", 
    "values": 4 
    }, 
    { 
    "names": "Pat", 
    "values": 5 
    }, 
    { 
    "names": "Rick", 
    "values": 6 
    }] 
] 

Ich bin überhaupt nicht mit JSON erlebt. Es fühlt sich an, als ob meine aktuellen Werte für die Tabelle in einem Objekt namens "Items" liegen sollten. Und dann muss ich 2 Stücke Metainformation - CaseID und Graph Name - auf der Oberseite haben. Irgendwelche Ratschläge, wie ich solche Zeilen hinzufügen oder generieren könnte, um mit toJSON zu beginnen?

Vielen Dank!

Antwort

1

Ihre Daten in eine Liste setzen, und es dann zu JSON konvertieren

forJson <- list(CaseID = 1234, graph = "name-of-the-graph", Items = forJson) 
toJSON(forJson, pretty = T) 
# 
# { 
# "CaseID": [1234], 
# "graph": ["name-of-the-graph"], 
# "Items": [ 
#  { 
#   "names": "John", 
#   "values": 3 
#  }, 
#  { 
#   "names": "Mary", 
#   "values": 4 
#  }, 
#  { 
#   "names": "Pat", 
#   "values": 5 
#  }, 
#  { 
#   "names": "Rick", 
#   "values": 6 
#  } 
#  ] 
# } 

Eine leichte Variation ist eine data.frame in einer list Spalte Ihrer gesamten data.frame

forJson <- data.frame(CaseID = 1234, graph = "name_of_graph") 
forJson$Items <- list(data.frame(names = c("John", "Mary", "Pat", "Rick"), 
           values = 3:6)) 

toJSON(forJson, pretty = T) 

# [ 
# { 
#  "CaseID": 1234, 
#  "graph": "name_of_graph", 
#  "Items": [ 
#   { 
#    "names": "John", 
#    "values": 3 
#   }, 
#   { 
#    "names": "Mary", 
#    "values": 4 
#   }, 
#   { 
#    "names": "Pat", 
#    "values": 5 
#   }, 
#   { 
#    "names": "Rick", 
#    "values": 6 
#   } 
#   ] 
# } 
# ] 

haben Die einfache Art, die benötigte R-Struktur zu berechnen, besteht darin, rückwärts von der JSON aus zu arbeiten, indem man sie mit fromJSON() einliest, was automatisch erfolgt lly geben Sie die R-Struktur

js <- '{ 
     "CaseID": 1234, 
     "graph": "name_of_graph", 
     "Items": [ 
      { 
       "names": "John", 
       "values": 3 
      }, 
      { 
       "names": "Mary", 
       "values": 4 
      }, 
      { 
       "names": "Pat", 
       "values": 5 
      }, 
      { 
       "names": "Rick", 
       "values": 6 
      } 
      ] 
    }' 

lst <- jsonlite::fromJSON(js) 
lst 
$CaseID 
[1] 1234 

$graph 
[1] "name_of_graph" 

$Items 
    names values 
1 John  3 
2 Mary  4 
3 Pat  5 
4 Rick  6 

Beachten Sie jedoch, dass, obwohl fromJSON() für CaseID und als einzelne Elemente in den Werten zu lesen, die toJSON() automatisch in Array-Elemente macht (aber in Wirklichkeit kann ich sehen, das nicht ein Problem sein).

toJSON(lst, pretty = T) 
{ 
    "CaseID": [1234], 
    "graph": ["name_of_graph"], 
    "Items": [ 
    { 
     "names": "John", 
     "values": 3 
    }, 
    ... etc 
+0

Perfekte Lösung - das ist großartig, vielen Dank! – user3245256

+0

@ user3245256 Gern geschehen. Ich war mir nicht sicher, das genaue Format, das Sie wollten, gab Ihnen also die zwei Möglichkeiten. Beachten Sie den feinen Unterschied, wo die erste ein Array für jedes Objekt hat, und die zweite hat Objekte gegen 'CaseID' und' graph', und ein Array gegen 'Items' – SymbolixAU

+0

Die letzte Lösung im Hinterkopf: jede Möglichkeit, den allerersten loszuwerden und ganz zuletzt [und]? – user3245256

Verwandte Themen