如何在Android中解析此Web服务响应?

Raj*_*ian 5 android

我正在使用KSOAP2从Android应用程序调用.NET Web服务,来自Web服务的响应采用以下格式

anyType{
UserName=anyType{}; 
Password=anyType{}; 
ApplicationCode=JOB; 
ActionType=Query; 
MessageParameters=anyType{Parameters=anyType{}; }; 
TableData=anyType{TableNo=167; 
          TableName=Job; 
      DataRows=
      anyType{
        DataRow=
          anyType{
             DataRowValues=
            anyType{
                DataRowValue=
                anyType{
                    FieldNo=1; 
                    FieldName=No.; 
                    PrimaryKey=true; 
                    FieldType=Code20; DataValue=DEERFIELD, 8 WP; 
                       };
               DataRowValue=
                anyType
                       {
                    FieldNo=3; 
                    FieldName=Description; 
                    PrimaryKey=false; 
                    FieldType=Text50; 
                    DataValue=Setting up Eight Work Areas; 
                       };
             DataRowValue=
                anyType
                       {
                    FieldNo=4; 
                    FieldName=Description 2; 
                    PrimaryKey=false; 
                    FieldType=Text50; 
                    DataValue=anyType{}; 
                       }; 
                }; 
              }; 
           }; 
       }; 
    }; 
 ResponseForRequest=GETTABLEDATA; 
 CustomIdentifier=TestBB; 
Applications=anyType{}; 
Forms=anyType{}; 
Menu=anyType{}; 
}
Run Code Online (Sandbox Code Playgroud)

我不知道这个响应的格式,我不知道如何解析这个响应以获得特定的结果.任何人都知道它,请帮助我.

注意:我手动格式化此响应以供您理解.

1Ha*_*aKr 7

其实这个如果你知道的Java Script.These这种格式的数据是逸岸已知格式JSON Object的和JSON Array的.我希望你使用的KSOAP2 library.So这里是你如何解析这个结果.

例如:

private Bundle bundleResult=new Bundle();
private JSONObject JSONObj;
private JSONArray JSONArr;
Private SoapObject resultSOAP = (SoapObject) envelope.getResponse();
/* gets our result in JSON String */
private String ResultObject = resultSOAP.getProperty(0).toString();

if (ResultObject.startsWith("{")) { // if JSON string is an object
    JSONObj = new JSONObject(ResultObject);
    Iterator<String> itr = JSONObj.keys();
    while (itr.hasNext()) {
        String Key = (String) itr.next();
        String Value = JSONObj.getString(Key);
        bundleResult.putString(Key, Value);
        // System.out.println(bundleResult.getString(Key));
    }
} else if (ResultObject.startsWith("[")) { // if JSON string is an array
    JSONArr = new JSONArray(ResultObject);
    System.out.println("length" + JSONArr.length());
    for (int i = 0; i < JSONArr.length(); i++) {
        JSONObj = (JSONObject) JSONArr.get(i);
        bundleResult.putString(String.valueOf(i), JSONObj.toString());
        // System.out.println(bundleResult.getString(i));
    } 
}
Run Code Online (Sandbox Code Playgroud)

最初我在使用这种数据时遇到了很多麻烦,但最后我把它全部搞定了.从那以后我一直在使用它.我希望这可以帮助你解决问题.


ram*_*moh 5

前提是SOAP响应采用有效的JSON格式; 接受的答案可能并不总是成功,因为响应字符串不是以"{"开头,而是以"anyType"开头.

在这种情况下,我总是得到关于"anyType"不是有效JSON对象的错误.然后我继续使用IndexOf("{")对响应字符串进行子串; 然后这开始解析,但如果响应字符串不是有效的JSON格式,它将会中断.

这里的问题是我的响应字符串有未转义的字符,这些字符与JSON格式无关.

参考这个答案:Android KSoap2:如何获取属性名称

这是我设法实现的:

    public Bundle getElementsFromSOAP(SoapObject so){
    Bundle resultBundle = new Bundle();
    String Key = null;
    String Value = null;
    int elementCount = so.getPropertyCount();                  

    for(int i = 0;i<elementCount;i++){
        PropertyInfo pi = new PropertyInfo();
        SoapObject nestedSO = (SoapObject)so.getProperty(i);

        int nestedElementCount = nestedSO.getPropertyCount();
        Log.i(tag, Integer.toString(nestedElementCount));

        for(int ii = 0;ii<nestedElementCount;ii++){
            nestedSO.getPropertyInfo(ii, pi);
            resultBundle.putString(pi.name, pi.getValue().toString());
            //Log.i(tag,pi.getName() + " " + pii.getProperty(ii).toString());
            //Log.i(tag,pi.getName() + ": " + pi.getValue());

        }
    }

    return resultBundle;

}
Run Code Online (Sandbox Code Playgroud)