pradipmw
pradipmw

Reputation: 191

JSON field array insertion in OrientDB

I am trying to persist following JSON,



    {
    "kind": "plus#person",
    "etag": "\"Sh4sdfsdfdfWv7jTXojqc/WnNi6ckHr4lXu1JzlY3Rz_GYpM8\"",
    "emails": [
    {
    "value": "[email protected]",
    "type": "account"
    }
    ],
    "objectType": "person",
    "id": "10209236048995686597",
    "displayName": "joe garry",
    "name": {
    "familyName": "Joe",
    "givenName": "Garry"
    },
    "isPlusUser": false,
    "language": "en",
    "verified": false,
    "domain": "gmail.com"
    }

Schema creation is as follows,



    OClass profile = schema.createClass("profile").setSuperClass(vClass);
    ProfileEnum[] profProps = ProfileEnum.values();
    for (int i = 0; i < profProps.length; i++) {
        profile.createProperty(profProps[i].name, profProps[i].otype);
    }

    OClass mail = schema.createClass("profileMails").setSuperClass(vClass);
    ProfileEnum.EMails[] emailProps = ProfileEnum.EMails.values();
    for (int i = 0; i < emailProps.length; i++) {
        mail.createProperty(emailProps[i].name, emailProps[i].otype);
    }
    profile.createProperty("emails", OType.EMBEDDEDLIST, mail);

    OClass name = schema.createClass("GOAuthPeopleName").setSuperClass(vClass);
    ProfileEnum.Name[] nameProps = ProfileEnum.Name.values();
    for (int i = 0; i < nameProps.length; i++) {
        name.createProperty(nameProps[i].name, nameProps[i].otype);
    }
    profile.createProperty("name", OType.EMBEDDED, name);

Insert JSON implementation,



    try (ODatabaseDocumentTx db = documentService().getTx()) {
        ODocument doc = new ODocument("profile").fromJSON(indvidual.getProfileJSON());
        doc.save();
    }

Above insertion is throwing following Error,

The field 'profile.emails' has been declared as EMBEDDEDLIST but an incompatible type is used. Value: {[email protected], type=account}

What is wrong with this code? Insertion work if emails files is not present in JSON.

Upvotes: 1

Views: 135

Answers (1)

pradipmw
pradipmw

Reputation: 191

After adding @type : “d” and @class in json I was able to insert,

{
  "@type" : "d",
  "@class": "profileMails",
  "value": "[email protected]",
  "type": "account"  
}

Upvotes: 2

Related Questions