JSON OrientDB中的字段数组插入

JSON field array insertion in OrientDB

我正在努力坚持JSON,



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

架构创建如下,



    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);

插入JSON实施,



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

上面的插入抛出了下面的错误,

字段 'profile.emails' 已声明为 EMBEDDEDLIST,但使用了不兼容的类型。值:{value=joe@ymail.com, type=account}

这段代码有什么问题?如果 JSON.

中不存在 emails 个文件,则插入工作

在 json 中添加 @type : “d” 和 @class 后,我能够插入,

{
  "@type" : "d",
  "@class": "profileMails",
  "value": "joe@ymail.com",
  "type": "account"  
}