OrientDB中的JSON字段数组插入

时间:2017-10-14 13:37:04

标签: json 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文件,则插入工作。

1 个答案:

答案 0 :(得分:2)

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

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