如何从JsonObject读取属性值

时间:2015-06-18 05:12:50

标签: json xml groovy

我有以下xml,我想从userReference

读取属性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>

我正在做这样的事情:

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。

2 个答案:

答案 0 :(得分: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' && it.@property == 'userReference'}
println foo.text() // 224662233412

希望这有帮助,

答案 1 :(得分:0)

以下为我解决了。

基本上我们需要做的是,而不是immediate parent objectattribute,我们需要获得parent objectattribute的第一个{。}}。

在这种情况下immediate parent object可以通过someid获得

&#13;
&#13;
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.
&#13;
&#13;
&#13;