2017-10-14 90 views
1

我试图坚持以下JSON,JSON场阵列插入OrientDB



    { 
    "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" 
    } 

模式创建如下,



    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,但使用了不兼容的类型。值:{[email protected],type = account}

这段代码有什么问题?如果emails文件不存在于JSON中,则插入工作。

回答

2

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

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