Droy
Droy

Reputation: 1

Create Nested Values in JSON format in R

I have a similar flatten JSON file and i would like to create a nested field for "Material_name_lv1", "Material_name_lv2", and "Material_name_lv3".

[
  {
    "Vendor": 100000,
    "Vendor.Name": "xxxCARS",
    "PO.Number": 4100004621,
    "Prod.Desc": "Taxi",
    "Date": "04/01/2014",
    "Material.group": "CO1250106",
    "Material.Name": "Corporate - Travel - Taxis",
    "PO.Item": 1,
    "Requester": "65",
    "Requester.Name": "Anna",
    "Payment.Terms": "YT",
    "Order..Value": 100,
    "GR..Value": 0,
    "GR..": 0,
    "Invoiced..Amount": 100,
    "Invoiced..": 100,
    "material_name_lv1": "Corporate ",
    "material_name_lv2": " Travel ",
    "material_name_lv3": " Taxis"
  },
  {
    "Vendor": 100000,
    "Vendor.Name": "xxx CARS",
    "PO.Number": 4100011066,
    "Prod.Desc": "Taxi when and as required",
    "Date": "02/01/2015",
    "Material.group": "CO1250106",
    "Material.Name": "Corporate - Travel",
    "PO.Item": 1,
    "Requester": "65",
    "Requester.Name": "Anna",
    "Payment.Terms": "YT",
    "Order..Value": 500,
    "GR..Value": 0,
    "GR..": 0,
    "Invoiced..Amount": 500,
    "Invoiced..": 100,
    "material_name_lv1": "Corporate ",
    "material_name_lv2": " Travel ",
    "material_name_lv3": ""
  }
]

I would like "Material_name_lv3" to be a nested field of "Material_name_lv2" and "Material_name_lv2" to be a nested field of "Material_name_lv1".

eg:-

{
    "Vendor": 100000,
    "Vendor.Name": "500 CARS",
    "PO.Number": 4100004621,
    "Prod.Desc": "Taxi",
    "Date": "04/01/2014",
    "Material.group": "CO1250106",
    "Material.Name": "Corporate - Travel - Taxis",
    "PO.Item": 1,
    "Requester": "65",
    "Requester.Name": "Kurzawa, Anna",
    "Payment.Terms": "YP30",
    "Order..Value": 10000,
    "GR..Value": 0,
    "GR..": 0,
    "Invoiced..Amount": 10000,
    "Invoiced..": 100,
    "material_name_lv1":{
      "name" : "coperate",
        "material_name_lv2": {
          "name": "Travel",
            material_name_lv3": {
              "name": "Taxis"
          }
        },
      },
  },

I am quite new to R and never worked on JSON files. I found a bunch of R packages that handles JSON but nothing solid on formatting commands. Any guidance would be appreciated.

NB:- i split the material_name levels from "Material.Name" and certain rows contain only 2 levels.

Thanks

Upvotes: 0

Views: 545

Answers (1)

cory
cory

Reputation: 6659

You just have to create a list in the same form as you want the JSON output...

mylist <- list(a="something",
               b=list("name"="myname",
                      "material_name"=list("name"="mat_name",
                                           "age"=12
                                           )
               )
)

> jsonlite::toJSON(mylist, pretty=TRUE, auto_unbox=TRUE)
{
  "a": "something",
  "b": {
    "name": "myname",
    "material_name": {
      "name": "mat_name",
      "age": 12
    }
  }
} 

Upvotes: 1

Related Questions