java - 无法从 .net Web 服务获取 JSONArray

标签 java android asp.net json cordova

我有一个由 .net Web 服务支持的多平台 Cordova 应用程序,该应用程序返回 JSON 数据以进行同步。这工作得很好。

我现在正在尝试将 native 调用添加到连接到 BroadcastReceiver 的应用程序的 Android 版本中,以便我可以在应用程序未运行时提供丰富的通知。

这些事件的调度和执行运行良好;但我在处理 Web 服务调用的结果时遇到了真正的问题。

Web 服务调用 (VB.net) 是:

<OperationContract()>
<WebInvoke(Method:="POST", ResponseFormat:=WebMessageFormat.Json)>
Public Function SyncNotifications_Native(ByVal dateAfter As String, ByVal which As Integer, ByVal userID As Int32) As String

Dim rowsList As New List(Of Dictionary(Of String, Object))()
Dim row As Dictionary(Of String, Object)
:::
:::
While dr.Read()
                row = New Dictionary(Of String, Object)
                row.Add("allow_reply", dr("allow_reply"))
                row.Add("content", dr("content"))
                row.Add("date_added", dr("date_added")
                row.Add("date_deleted", dr("date_deleted")
                row.Add("date_read", dr("date_read")
                row.Add("deleted", dr("deleted"))
                row.Add("last_update", Now().ToString("yyyy-MM-dd HH:mm:ss"))
                row.Add("notification_id", dr("notification_id"))
                row.Add("subject_line", dr("subject_line"))
                row.Add("user_id", dr("user_id"))
                rowsList.Add(row)
            End While

Return New JavaScriptSerializer().Serialize(details)
End Function

这应该返回一个包含零个或多个条目的数组。 我正在使用 AsyncTask 来获取数据。这是我从调用中返回的数据:

{"d":"
[{\"allow_reply\":1,\"content\":\"test content\",
\"date_added\":\"2016-02-04 23:37:50\",\"date_deleted\":\"\",
\"date_read\":\"\",\"deleted\":0,\"last_update\":\"2016-02-04 23:38:43\",
\"notification_id\":27,\"subject_line\":\"test\",\"user_id\":1}]
"}

我查看了各种资源并尝试了所有类型的解决方案。这就是我目前正在做的事情:

将返回字符串转换为 JSON 对象:

JSONObject json2 = new JSONObject(s);

尝试从对象中取出数组:

JSONArray results = json2.getJSONArray("d");

这种方式给了我一个错误:

java.lang.String cannot be converted to JSONArray

我在另一篇文章中看到了一个建议,即我实际上是从我的 Web 服务返回 SOAP 响应;我不确定,我还没有看到任何其他以

开头的 JSON 响应示例
{"d":

如何正确地将返回的数组放入 JSONArray 中,以便将其传递给另一个函数?

谢谢

最佳答案

不是 Java 开发人员,所以:

  • {"d": "[{\"allow_reply\":1,\....."} 是一个对象
  • 带有 d 字段
  • 其值为字符串 "[{\"allow_reply\":1,\....."} 这就是为什么你得到java .lang.String 无法转换为 JSONArray
  • 所以你必须解析(又名“反序列化”)

所以在 Javascript 中(你必须 translate to Java ):

//this is the data your service returns
var foo = {"d": "[{\"allow_reply\":1,\"content\":\"test content\",\"date_added\":\"2016-02-04 23:37:50\",\"date_deleted\":\"\",\"date_read\":\"\",  \"deleted\":0,\"last_update\":\"2016-02-04 23:38:43\",\"notification_id\":27,\"subject_line\":\"test\",\"user_id\":1}]"};

//parse the string
var data = JSON.parse(foo.d); 

data 现在包含您的数组

因此,在上面的代码中,您必须解析字符串并将其转换为它表示的对象(来自字符串)。

第...

关于java - 无法从 .net Web 服务获取 JSONArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35214373/

相关文章:

asp.net - 与客户端的 WCF 通知和回调

c# - 如何使用报表查看器在 asp.net 中创建报表

asp.net - RadControls for ASP.NET (telerik) 中的 OnClientClick 和 AJAX 不起作用

java - 自从 @SpringApplicationConfiguration、@WebIntegration 在 Spring Boot 框架中被弃用以来,正确的注释是什么?

java - 如何从静态上下文中引用二维数组?

Java 1.7,时钟格式不起作用

Android 推送通知 Firebase 有时不发送通知

android - 如何为 fragment 设置 onClick 监听器?

java - 加载大文件时tomcat重启超时

android - scrollview 在 android 中太慢