2015-06-18 40 views
0

我有以下XML讀取屬性值,我想從JsonObject如何從JSONObject的

<void property="someId"> 
 
<object class=com.someclass> 
 
      <void method="add"> 
 
       <object class="com.xyz.data"> 
 
       <void property="firstActivationDate"> 
 
        <object class="java.util.Date"> 
 
        <long>11122344000</long> 
 
        </object> 
 
       </void> 
 
       <void property="service"> 
 
        <string>P2P</string> 
 
       </void> 
 
       <void property="status"> 
 
        <object idref="newSerivice"/> 
 
       </void> 
 
       </object> 
 
       </void> 
 
       </void> 
 
       <void property="userId"> 
 
       <string>224662233412</string> 
 
       </void> 
 
       <void property="userReference"> 
 
       <string>224662233412</string> 
 
       </void> 
 
      </object> 
 
     </void> 
 
    </object> 
 
</void>

我做這樣的事情讀取屬性userReference值:

def content = parser.parse(xmlStream.getJSON()).getAsJsonObject() 
def jsonObject = content.get(//what should be the node here ?)?.getAsJsonObject() 
if (jsonObject) { 
    userRef = jsonObject.get("userReference")?.getAsString() 
    } 

我很困惑在哪裏得到包含這個屬性的jsonObject。

+0

什麼是 「內容」 來獲得? – Toilal

+0

這是一個奇怪的問題。 JSON和XML是非常不同的數據描述語言。你如何期待JSON正確解析XML? – cadrian

+1

@cadrian,我的壞,認爲它是'JSON字符串'而不是'xml',我已經將它解析爲樹。 – Sajjad

回答

0

我認爲你使用gson庫中的com.google.gson.JsonParser,但是我不確定,因爲你的問題沒有足夠的上下文。

無論如何,你爲什麼不使用gdk的XmlSlurper來實現你的目標。

假設你希望得到您的XML的後續節點中的文本值:

<void property="userReference"> 
    <string>224662233412</string> 
</void> 

可以使用如下代碼(先前修正XML得到很好的形成):

import groovy.xml.* 
def xmlText = '''<void> 
    <object> 
     <void> 
      <void method="add"> 
       <object class="com.xyz.data"> 
        <void property="firstActivationDate"> 
         <object class="java.util.Date"> 
          <long>11122344000</long> 
         </object> 
        </void> 
        <void property="service"> 
         <string>P2P</string> 
        </void> 
        <void property="status"> 
         <object idref="newSerivice"/> 
        </void> 
       </object> 
      </void> 
     </void> 
     <void property="userId"> 
      <string>224662233412</string> 
     </void> 
     <void property="userReference"> 
      <string>224662233412</string> 
     </void> 
    </object> 
</void>''' 

def xml = new XmlSlurper().parseText(xmlText) 
def foo = xml.depthFirst().find { it.name() == 'void' && [email protected] == 'userReference'} 
println foo.text() // 224662233412 

希望這有助於,

0

以下解決了我。

基本上,我們需要做的是什麼,而不是得到immediate parent objectattribute,我們需要得到的第一個最parent objectattribute

在這種情況下immediate parent object可以通過someid

def jsonObject = tr.get("someId")?.getAsJsonObject() //get parent object which encloses child object, that child object encloses the attribute. 
 
userRef = jsonObject.get("userReference")?.getAsString() // get required attribute directly from immediate parent object.