【发布时间】:2011-02-10 16:20:38
【问题描述】:
只是为了公开这个我是 JAVA、KSOAP 和 JSON 的新手。所以我会尽力解释这一点。
不久前,我创建了一个 Web 服务,供我们使用 Visual Studio 插件构建的 Blackberry Apps 使用。现在我正在处理的项目,我想为 Android 设备使用相同的 web 服务。在大多数情况下,我已经完成并运行了 Android 应用程序的基本代码。这是我的问题:
我可以成功调用网络服务并得到响应。我通过创建 Web 服务知道它发送 JSON 响应。我的问题是试图解析 JSON 响应。我找到了一些适合我需要的示例,但是我对一件事很感兴趣。
在 JSON 中,每个元素前面都有“anyType”,这迫使我的代码不返回任何结果(最终我将数据绑定到 ArrayList)如果我“getProperty(0).toString(). ..
anyType{Artist=anyType{TrackName=Champagne Supernova;};
这是我用来解析 JSON 对象的代码......
SoapObject gr = (SoapObject)envelope.getResponse();
String ro = gr.getProperty(0).toString();
//Added just to see structure of response
Artist_Result.add(gr.toString());
if (ro.startsWith("{"))
{
JSONObject JSONObj = new JSONObject(ro);
Iterator<String> itr = JSONObj.keys();
while (itr.hasNext())
{
String key = (String)itr.next();
String value = JSONObj.getString(key);
//bundleResult.putString(key, value);
Artist_Result.add(value);
}
}
else if (ro.startsWith("["))
{
JSONArr = new JSONArray(ro);
for (int i = 0; i < JSONArr.length(); i++)
{
JSONObj = (JSONObject)JSONArr.get(i);
//bundleResult.putString(String.valueOf(i), JSONObj.toString());
Artist_Result.add(JSONObj.toString());
}
}
网络服务代码:
[WebMethod]
[return: System.Xml.Serialization.XmlArrayItemAttribute(typeof(Artist))]
public Artist[] GetArtist(string ArtistQuery)
{
// All the SQL Stuff Here
SqlDataReader sReader;
sReader = cmd.ExecuteReader();
List<Artist> Artists = new List<Artist>();
while (sReader.Read())
{
Artist result = new Artist();
result.TrackName = sReader.GetString(0);
Artists.Add(result);
}
sReader.Close();
sqlConn.Close();
return Artists.ToArray();
}
public class Artist
{
public string TrackName;
}
来自浏览器的 XML 输出示例:
<?xml version="1.0" encoding="utf-8" ?>
- <ArrayOfArtist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://bb.mcrcog.com/">
- <Artist>
<TrackName>Champagne Supernova</TrackName>
</Artist>
- <Artist>
<TrackName>Don't Look Back In Anger</TrackName>
</Artist>
- <Artist>
<TrackName>D'you Know What I Mean</TrackName>
</Artist>
- <Artist>
<TrackName>Go Let It Out</TrackName>
</Artist>
我觉得我需要在 Android 端实现一个类和 Getters/Setters。我只是不知道该怎么做。任何帮助将不胜感激!
【问题讨论】:
-
AFAIK,这不是有效的 JSON,这将增加您的难度。 json.org
-
对我来说这根本不像是有效的 JSON。我怀疑你能否让内置的解析器用它做任何事情
-
我知道这将是一个混乱的项目....但是当我构建 Web 服务时,就像我说的那样,它是用于黑莓应用程序的,使用 Visual Studio 的插件....反过来,它们实际上是用 JavaScript 编写的,并且 Web 服务与 BB 应用程序完美配合。插件会自动解析响应(通过使用 Visual Studio 的“添加 Web 引用”),所以我从来不用处理这个,直到我跳过平台,现在我迷路了。