无法从.net Web服务获取JSONArray

时间:2016-02-05 00:37:21

标签: java android asp.net json cordova

我有一个由.net网络服务支持的多平台Cordova应用程序,它返回用于同步的JSON数据。这很好。

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

这些事件的调度和执行运行良好;但我在处理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中,以便将其传递给另一个函数?

由于

1 个答案:

答案 0 :(得分:1)

Am Java dev所以:

  • {"d": "[{\"allow_reply\":1,\....."}是一个对象
  • 带有d字段
  • ,其值为string "[{\"allow_reply\":1,\....."},这就是您获得java.lang.String cannot be converted to JSONArray
  • 的原因
  • 所以你必须parse(又名&#34;反序列化&#34;)

所以在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现在包含你的数组

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

... H个