2017-10-14 48 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" 
}