R
Let us assume that we have already have child data in R
stored as a data.frame
or tibble
. Here we work with longitudinal demo data maria
from the bdsreader
package.
library(bdsreader)
maria
## $child
## # A tibble: 1 × 13
## src id name dob sex gad smo bw dobf dobm hgtm hgtf etn
## <chr> <dbl> <chr> <chr> <chr> <dbl> <dbl> <dbl> <chr> <chr> <dbl> <dbl> <chr>
## 1 1234 5678 Maria 11-10… fema… 189 1 990 04-0… 02-1… 167 190 NL
##
## $time
## # A tibble: 2 × 8
## src id age sex ga hgt wgt hdc
## <chr> <dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 1234 5678 0.0849 female 27 38 1.25 27
## 2 1234 5678 0.167 female 27 43.5 2.1 30.5
The dataset for Maria consists of a list of two elements: child
and time
. The child
element contain child-level variables, such as sex or height of parents. Element time
is a tibble with measured body data at two different ages.
The bdsreader
package contains a function export_as_bds()
that can convert and save the data in a JSON formatted file.
export_as_bds(maria, ids = 5678, name = "maria", indent = 2)
## Processing file: maria.json
This statement writes a file named "maria.json"
to the working directory.
{
"Format": "2.0",
"OrganisatieCode": 1234,
"Referentie": "Maria",
"ClientGegevens": [
{
"ElementNummer": 19,
"Waarde": "2"
},
{
"ElementNummer": 20,
"Waarde": "20181011"
},
{
"ElementNummer": 82,
"Waarde": 189
},
{
"ElementNummer": 91,
"Waarde": "1"
},
{
"ElementNummer": 110,
"Waarde": 990
},
{
"ElementNummer": 238,
"Waarde": 1670
},
{
"ElementNummer": 240,
"Waarde": 1900
},
{
"GenesteElementen": [
{
"ElementNummer": 63,
"Waarde": "19950704"
},
{
"ElementNummer": 71
},
{
"ElementNummer": 62,
"Waarde": "01"
}
]
},
{
"GenesteElementen": [
{
"ElementNummer": 63,
"Waarde": "19901202"
},
{
"ElementNummer": 71
},
{
"ElementNummer": 62,
"Waarde": "02"
}
]
}
],
"ContactMomenten": [
{
"Tijdstip": "20181111",
"Elementen": [
{
"ElementNummer": 235,
"Waarde": 380
},
{
"ElementNummer": 245,
"Waarde": 1250
},
{
"ElementNummer": 252,
"Waarde": 270
}
]
},
{
"Tijdstip": "20181211",
"Elementen": [
{
"ElementNummer": 235,
"Waarde": 435
},
{
"ElementNummer": 245,
"Waarde": 2100
},
{
"ElementNummer": 252,
"Waarde": 305
}
]
}
]
}
There are now four ways to upload the data to JAMES:
- Upload the file
"maria.json"
;
- Convert to a string and upload;
- Convert to a JSON object and upload;
- Read the JSON from a URL.
The james_post()
function can call the /upload/json
API end point and handles these cases as follows:
# upload as file
fn <- "maria.json"
r1 <- james_post(host = host, path = "data/upload/json", txt = fn)
status_code(r1)
## [1] 201
# upload as string
js <- read_json_js(fn)
r2 <- james_post(host = host, path = "data/upload/json", txt = js)
status_code(r2)
## [1] 201
# upload as JSON object
jo <- read_json_jo(fn)
r3 <- james_post(host = host, path = "data/upload/json", txt = jo)
status_code(r3)
## [1] 201
# upload as URL
url <- file.path(host, "ocpu/library/bdsreader/examples/maria.json")
r4 <- james_post(host = host, path = "data/upload/json", txt = url)
status_code(r4)
## [1] 201
If the status is 201, the data are uploaded to JAMES and processed. For example, the processed data after file upload is available as an R data frame under element r1$parsed
.
r1$parsed
## $psn
## id name dob dobf dobm src sex gad ga smo bw hgtm hgtf
## 1 -1 Maria 2018-10-11 1995-07-04 1990-12-02 0 female 189 27 1 990 167 190
## agem etn
## 1 27 NL
##
## $xyz
## age xname yname zname zref x y z
## 1 0.0849 age hgt hgt_z nl_2012_hgt_female_27 0.0849 38.00 -0.158
## 2 0.1670 age hgt hgt_z nl_2012_hgt_female_27 0.1670 43.50 0.047
## 3 0.0849 age wgt wgt_z nl_2012_wgt_female_27 0.0849 1.25 -0.203
## 4 0.1670 age wgt wgt_z nl_2012_wgt_female_27 0.1670 2.10 0.015
## 5 0.0849 age hdc hdc_z nl_2012_hdc_female_27 0.0849 27.00 -0.709
## 6 0.1670 age hdc hdc_z nl_2012_hdc_female_27 0.1670 30.50 -0.913
## 7 0.0849 age bmi bmi_z nl_1997_bmi_female_nl 0.0849 8.66 -5.719
## 8 0.1670 age bmi bmi_z nl_1997_bmi_female_nl 0.1670 11.10 -3.767
## 9 0.0849 hgt wfh wfh_z nl_2012_wfh_female_ 38.0000 1.25 -0.001
## 10 0.1670 hgt wfh wfh_z nl_2012_wfh_female_ 43.5000 2.10 0.326
## 11 0.0000 age wgt wgt_z nl_2012_wgt_female_27 0.0000 0.99 0.190
The resources produced by JAMES results will remain available for two hours under the session key. The session key is your entrance to the resource and can be retrieved from the james_post
class from the session
element. For example, if we want to see the result of the last session in markdown:
(session <- r1$session)
## [1] "x062dba398f3bb1"
resp <- james_get(host = host, path = file.path(session, "md"))
cat(resp$parsed, "\n")
##
##
## * **psn**:
##
## ------------------------------------------------------------------------------
## id name dob dobf dobm src dnr sex gad
## ---- ------- ------------ ------------ ------------ ----- ----- -------- -----
## -1 Maria 2018-10-11 1995-07-04 1990-12-02 0 NA female 189
## ------------------------------------------------------------------------------
##
## Table: Table continues below
##
##
## -------------------------------------------
## ga smo bw hgtm hgtf agem etn
## ---- ----- ----- ------ ------ ------ -----
## 27 1 990 167 190 27 NL
## -------------------------------------------
##
## * **xyz**:
##
## ----------------------------------------------------------------------------------
## age xname yname zname zref x y z
## -------- ------- ------- ------- ----------------------- -------- ------- --------
## 0.0849 age hgt hgt_z nl_2012_hgt_female_27 0.0849 38 -0.158
##
## 0.167 age hgt hgt_z nl_2012_hgt_female_27 0.167 43.5 0.047
##
## 0.0849 age wgt wgt_z nl_2012_wgt_female_27 0.0849 1.25 -0.203
##
## 0.167 age wgt wgt_z nl_2012_wgt_female_27 0.167 2.1 0.015
##
## 0.0849 age hdc hdc_z nl_2012_hdc_female_27 0.0849 27 -0.709
##
## 0.167 age hdc hdc_z nl_2012_hdc_female_27 0.167 30.5 -0.913
##
## 0.0849 age bmi bmi_z nl_1997_bmi_female_nl 0.0849 8.657 -5.719
##
## 0.167 age bmi bmi_z nl_1997_bmi_female_nl 0.167 11.1 -3.767
##
## 0.0849 hgt wfh wfh_z nl_2012_wfh_female_ 38 1.25 -0.001
##
## 0.167 hgt wfh wfh_z nl_2012_wfh_female_ 43.5 2.1 0.326
##
## 0 age wgt wgt_z nl_2012_wgt_female_27 0 0.99 0.19
## ----------------------------------------------------------------------------------
##
##
## <!-- end of list -->
##
##
##
bash
We start from child data in the file maria.json
that we wish to process with JAMES. For testing purposes, you may change the values, but keep the general structure intact. The following curl
commands uploads the file and processes the data.
curl -sF 'txt=@maria.json' -D headers $(cat .host)/data/upload/json > content
head content
## {
## "psn": [
## {
## "id": -1,
## "name": "Maria",
## "dob": "2018-10-11",
## "dobf": "1995-07-04",
## "dobm": "1990-12-02",
## "src": "0",
## "sex": "female",
Alternatively, we may read the file into a JSON string, and upload as follows:
JS=$(jq '.' maria.json | jq -sR '.')
curl -s $(cat .host)/data/upload/json -d "txt=$JS" > content
Finally, if the data are located at a URL, use
URL=$(cat .host)/ocpu/library/bdsreader/examples/maria.json
curl -s $(cat .host)/data/upload/json -d "txt='$URL'" > content