java - 解析来自 .Net 网络服务的 JSON 响应

标签 java .net android json

为了公开这一点,我是 JAVA、KSOAP 和 JSON 的新手。所以我会尽我所能解释这一点。

不久前,我创建了一个供 Blackberry Apps 使用的 Web 服务,我们使用 Visual Studio 插件构建该服务。现在我正在从事的项目,我想为 Android 设备使用相同的网络服务。在大多数情况下,我已经完成并运行了 Android 应用程序的基本代码。这是我的问题:

我可以成功调用网络服务并获得响应。我从创建它发送 JSON 响应的 web 服务中知道。我的问题是试图解析 JSON 响应。我找到了一些适合我需要的例子,但是我对一件事很着迷。

在 JSON 中,每个元素前面都有“anyType”,这迫使我的代码不返回任何结果(最终我将数据绑定(bind)到 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。我只是不确定该怎么做。任何帮助将不胜感激!

最佳答案

看起来您正在使用 org.json 包。 我建议您使用位于 http://json-lib.sourceforge.net/net.sf.json 包 它包含更多功能,您可以毫不费力地使用 JSONObject.fromObject(obj)(类似于 JSONArrays)从字符串(或 Map 等其他对象)创建 JSONObject 或 JSONArray。

关于java - 解析来自 .Net 网络服务的 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2684398/

相关文章:

java - 对于使用 Java Iterator 的每个循环

c# - 使用tasks和ContinueWith来实现调度器

.net - 编写开源库时应该遵循哪些 StyleCop 规则

javascript - Appcelerator 应用程序计时器,用于检查服务器 api 响应

android - 单元测试 LiveData android.os.Looper 未模拟

java:广度优先遍历迷宫回溯

java - 在 JSF Web 应用程序中处理 'session expired',在 JBoss AS 5 中运行

java - 创建将在 Web 浏览器中显示的 Java 小程序

c# - 如何从 C# 中的 xml 中读取特定节点?

android - 适用于 Android、Drive.SCOPE_FILE 和多种设备的 Google Drive SDK