我正在使用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)
我不知道这个响应的格式,我不知道如何解析这个响应以获得特定的结果.任何人都知道它,请帮助我.
注意:我手动格式化此响应以供您理解.
其实这个如果你知道的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)
最初我在使用这种数据时遇到了很多麻烦,但最后我把它全部搞定了.从那以后我一直在使用它.我希望这可以帮助你解决问题.
前提是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)
| 归档时间: |
|
| 查看次数: |
9729 次 |
| 最近记录: |