Skip to main content
All CollectionsGeneral questions
Global Entity File Formats
Global Entity File Formats
Jason Liang avatar
Written by Jason Liang
Updated over 2 months ago

brainCloud supports the import and export of Global Entities via JSON files. This is useful for:

  • Backing up global entity data

  • Migrating entities from app to app

  • Integrating easily with external tools

There are four different JSON file formats supported. There are pros and cons to each of them:

  • Raw JSON Object format - highly recommended for backups and data migration. Not as clean for use with external tools.

  • Simplified JSON Object format - very good for integration with external tools.

  • Simplified JSON Line format - useful for integration with external tools that support JSON line format. Limited to a single entity type per file.

  • CSV format - can be accessed through a variety of applications, supported for the "Exporting" operation only.

Each of the file formats is described in more detail below.

Raw JSON Object Format:

Below is a raw JSON object file.

{
"hero": [
{
"entityIndexedId": "superman",
"timeToLive": null,
"createdAt": 1506914746453,
"data": {
"name": "Superman",
"alignment": "Lawful Good",
"cape": true,
"sex": "m",
"secretIdentity": { "firstName": "Clark", "lastName": "Kent" },
"attributes": {
"intelligence": 90,
"strength": 300,
"charisma": 95
},
"powers": [
"flight",
"xray vision",
"heat vision",
"super strength",
"invulnerable"
],
"skills": ["combat"],
"equipment": ["glasses"]
},
"entityType": "hero",
"appId": "22436",
"entityId": "2642b324-0c86-4779-817a-832c30884c81",
"acl": { "other": 1 },
"ownerId": null,
"version": 1,
"expiresAt": 9223372036854775807,
"updatedAt": 1506914746453
},
{
"entityIndexedId": "batman",
"timeToLive": null,
"createdAt": 1506914673444,
"data": {
"name": "Batman",
"alignment": "Neutral Good",
"cape": true,
"sex": "m",
"secretIdentity": { "firstName": "Bruce", "lastName": "Wayne" },
"attributes": {
"intelligence": 99,
"strength": 95,
"charisma": 90
},
"powers": [],
"skills": [
"martial arts",
"combat",
"detective",
"stealth",
"tactics"
],
"equipment": ["grapple gun", "batarangs", "utility belt"]
},
"entityType": "hero",
"appId": "22436",
"entityId": "9e73c19a-f82e-4385-8bce-320c249b2c9b",
"acl": { "other": 1 },
"ownerId": null,
"version": 1,
"expiresAt": 9223372036854775807,
"updatedAt": 1506914673444
},
{
"entityIndexedId": "wonder woman",
"timeToLive": null,
"createdAt": 1506914835429,
"data": {
"name": "Wonder Woman",
"alignment": "Neutral Good",
"cape": false,
"sex": "f",
"secretIdentity": {
"firstName": "Diana",
"lastName": "Prince"
},
"attributes": {
"intelligence": 90,
"strength": 250,
"charisma": 92
},
"powers": ["flight", "super strength", "invulnerability"],
"skills": ["combat"],
"equipment": ["lasso", "sword", "shield"]
},
"entityType": "hero",
"appId": "22436",
"entityId": "dce12974-d76d-4922-b011-ec596ec14d47",
"acl": { "other": 1 },
"ownerId": null,
"version": 1,
"expiresAt": 9223372036854775807,
"updatedAt": 1506914835429
}
]
}

File format specifics:

  • EntityTypes are enclosed in JSON arrays - and thus multiple entityTypes are supported.

  • brainCloud meta-data is preserved

    • entityId

    • entityIndexedId

    • timeToLive

    • expiresAt

    • createdAt

    • updatedAt

    • version

    • acl

    • ownerId ← only if the appId of the record matches the currently selected

    • appId

Note that although the example above only shows a single entity type, "hero", the file structure does allow multiple types of entities to be present in a single file.

Simplified JSON Object Format:

Simplified JSON is very readable and suitable for round-trip importing and exporting with tools like Google Sheets.

It minimizes the structure and overheads that brainCloud imposes - though that comes with limitations (record-level ACL, ownership, and entityIds are not preserved).

File format specifics:

  • EntityTypes are enclosed in JSON arrays - and thus multiple entityTypes are supported. ← Same as RAW

  • brainCloud meta-data is NOT preserved, other than entityIndexedId (encoded as _eiid) and entityType (represented by the enclosing array)

  • The lack of a "data" section makes the object easier to view and understand

{
"hero": [
{
"name": "Superman",
"alignment": "Lawful Good",
"cape": true,
"sex": "m",
"secretIdentity": { "firstName": "Clark", "lastName": "Kent" },
"attributes": {
"intelligence": 90,
"strength": 300,
"charisma": 95
},
"powers": [
"flight",
"xray vision",
"heat vision",
"super strength",
"invulnerable"
],
"skills": ["combat"],
"equipment": ["glasses"],
"_eiid": "superman"
},
{
"name": "Batman",
"alignment": "Neutral Good",
"cape": true,
"sex": "m",
"secretIdentity": { "firstName": "Bruce", "lastName": "Wayne" },
"attributes": {
"intelligence": 99,
"strength": 95,
"charisma": 90
},
"powers": [],
"skills": [
"martial arts",
"combat",
"detective",
"stealth",
"tactics"
],
"equipment": ["grapple gun", "batarangs", "utility belt"],
"_eiid": "batman"
},
{
"name": "Wonder Woman",
"alignment": "Neutral Good",
"cape": false,
"sex": "f",
"secretIdentity": { "firstName": "Diana", "lastName": "Prince" },
"attributes": {
"intelligence": 90,
"strength": 250,
"charisma": 92
},
"powers": ["flight", "super strength", "invulnerability"],
"skills": ["combat"],
"equipment": ["lasso", "sword", "shield"],
"_eiid": "wonder woman"
}
]
}

NOTE - _eiid is not unique - it is simply a lookup index. This is one of the reasons that we delete all entities of a type before importing - so that each import doesn't create more and more entities!

Simplified JSON Lines Format:

JSON Lines files are a bit simpler in structure than JSON object files - in that they don't require the enclosing object array structure.

{"name":"Superman","alignment":"Lawful Good","cape":true,"sex":"m","secretIdentity":{"firstName":"Clark","lastName":"Kent"},"_eiid":"superman"}

{"name":"Batman","alignment":"Neutral Good","cape":true,"sex":"m","secretIdentity":{"firstName":"Bruce","lastName":"Wayne"},,"_eiid":"batman"}

{"name":"Wonder Woman","alignment":"Neutral Good","cape":false,"sex":"f","secretIdentity":{"firstName":"Diana","lastName":"Prince"},"_eiid":"wonder woman"}

Each line of the file is considered a separate JSON object.

Because of this, JSON Lines files can only support a single _entityType_ per file.

Note that we are using a simpler example for better readability. Also, note that the file above contains just 3 lines (it looks like more due to word-wrapping - notice the line numbers).

CSV Format:

In contrast to JSON, CSV requires less technical skill and can be accessed through a wide range of applications. Currently, this format is only supported for the "Exporting" operation.

name,alignment,cape,sex,_eiid,secretIdentity.firstName,secretIdentity.lastName

"Superman","Lawful Good",true,"m","superman","Clark","Kent"

"Batman","Neutral Good",true,"m","batman","Bruce","Wayne"

"Wonder Woman","Neutral Good",false,"f","wonder woman","Diana","Prince"

File format specifics:

  • Each line of the file is considered a separate record.

  • brainCloud meta-data is NOT preserved, other than entityIndexedId (encoded as _eiid)

Did this answer your question?