我有一个由.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中,以便将其传递给另一个函数?
由于
答案 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个