Arrays 无法将JSON解析的响应转换为数组

Arrays 无法将JSON解析的响应转换为数组,arrays,json,vb.net,api,parsing,Arrays,Json,Vb.net,Api,Parsing,我正在使用TMDb API为VB中的程序获取数据,我试图获取从JSON原始响应返回的电影的所有ID的数组,但它不断出现错误。我的代码在VB.net中,我的代码如下所示: Imports System.IO 导入系统.Net 导入Newtonsoft.Json.Linq 公共类TMDb_连接 私有API_密钥为String=“我的API密钥” 私有API_url作为字符串=”https://api.themoviedb.org/3" 私有API_图像_基础_url作为字符串=”https://im

我正在使用TMDb API为VB中的程序获取数据,我试图获取从JSON原始响应返回的电影的所有ID的数组,但它不断出现错误。我的代码在VB.net中,我的代码如下所示:

Imports System.IO
导入系统.Net
导入Newtonsoft.Json.Linq
公共类TMDb_连接
私有API_密钥为String=“我的API密钥”
私有API_url作为字符串=”https://api.themoviedb.org/3"
私有API_图像_基础_url作为字符串=”https://image.tmdb.org/t/p/w500/"
私有API_分页为String=“1”
公共子搜索API(ByVal API_查询为字符串,ByVal ObjectToken为字符串)
作为HttpWebResponse的Dim响应
Dim postData As String=“api\u key=”&api\u key&“&query=”&WebUtility.UrlEncode(api\u query)
Dim请求作为HttpWebRequest=DirectCast(HttpWebRequest.Create(API\u url&“/search/movie?”&postData),HttpWebRequest)
Request.Method=“GET”
尝试
Response=DirectCast(Request.GetResponse(),HttpWebResponse)
Dim Stream As Stream=Response.GetResponseStream()
Dim reader作为新的StreamReader(Stream,Encoding.GetEncoding(“utf-8”))
Dim responseFromServer As String=reader.ReadToEnd()
reader.Close()
答复:Close()
Dim obj=JObject.Parse(responseFromServer)
Dim obj2 As String=JObject.Parse(obj.SelectToken(“结果”))
MsgBox(对象选择令牌(对象令牌))
特例
MsgBox(例如消息)
结束尝试
端接头
末级
这是我从TMDb API收到的JSON的原始响应

我收到的错误消息是

'无法将数组转换为字符串'


注意:我的API密钥有一个字符串值占位符,因为密钥应该完全私有,在我的程序中,它有它的真实值,而不是这个占位符。您的结果在一个数组中-一个电影列表

尝试将此上的类型从As String更改为As JObject,然后使用其中的结果


Dim obj2 As String=JObject.Parse(obj.SelectToken(“results”))

在的帮助下,我解决了这个问题,修改后的代码如下

Imports System.IO
Imports System.Net
Imports Newtonsoft.Json.Linq
Public Class TMDb_Connection
    Private API_Key As String = "My API key here"
    Private API_url As String = "https://api.themoviedb.org/3"
    Private API_Image_Base_url As String = "https://image.tmdb.org/t/p/w500/"
    Private API_Pagination As String = "1"

    Public Sub SearchAPI(ByVal API_Query As String, ByVal ObjectToken As String)
        Dim Response As HttpWebResponse
        Dim postData As String = "api_key=" & API_Key & "&query=" & WebUtility.UrlEncode(API_Query)
        Dim Request As HttpWebRequest = DirectCast(HttpWebRequest.Create(API_url & "/search/movie?" & postData), HttpWebRequest)
        Request.Method = "GET"

        Try
            Response = DirectCast(Request.GetResponse(), HttpWebResponse)
            Dim Stream As Stream = Response.GetResponseStream()
            Dim reader As New StreamReader(Stream, Encoding.GetEncoding("utf-8"))
            Dim responseFromServer As String = reader.ReadToEnd()
            reader.Close()
            Response.Close()
            Dim obj As JObject = JObject.Parse(responseFromServer)
            Dim objarray As JArray = JArray.Parse(obj.SelectToken("results").ToString)
            Dim temp As String = ""
            For Each results As JObject In objarray
                temp = temp & results.SelectToken("id").ToString() & ", "
            Next
            MsgBox(temp)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

此代码将创建一个消息框,其中按顺序打印出电影的所有ID。JSON解析似乎试图解析每部电影的每个id,但无法解析,因为它不在数组中,尽管我自己还没有完全理解它。我希望这有助于任何人谁遇到这一点,并随时提出任何问题,虽然我不能保证知道答案!也非常感谢其他帮助我的人

尝试在一个工具中解析输出(你会在网上找到一个人-谷歌it),该工具将输出解析为json格式!将更容易发现一些错误…我按照您的要求检查了via,原始JSON代码似乎没有问题,在我将整个内容打印到其中时没有错误。我编辑了我的代码,因此两个变量obj和obj2被定义为JObjects,我仍然得到与JObject=JObject.Parse相同的msgbox error`Dim obj(responseFromServer)将obj2的尺寸标注为JObject=JObject.Parse(obj.SelectToken(“结果”))`
Imports System.IO
Imports System.Net
Imports Newtonsoft.Json.Linq
Public Class TMDb_Connection
    Private API_Key As String = "My API key here"
    Private API_url As String = "https://api.themoviedb.org/3"
    Private API_Image_Base_url As String = "https://image.tmdb.org/t/p/w500/"
    Private API_Pagination As String = "1"

    Public Sub SearchAPI(ByVal API_Query As String, ByVal ObjectToken As String)
        Dim Response As HttpWebResponse
        Dim postData As String = "api_key=" & API_Key & "&query=" & WebUtility.UrlEncode(API_Query)
        Dim Request As HttpWebRequest = DirectCast(HttpWebRequest.Create(API_url & "/search/movie?" & postData), HttpWebRequest)
        Request.Method = "GET"

        Try
            Response = DirectCast(Request.GetResponse(), HttpWebResponse)
            Dim Stream As Stream = Response.GetResponseStream()
            Dim reader As New StreamReader(Stream, Encoding.GetEncoding("utf-8"))
            Dim responseFromServer As String = reader.ReadToEnd()
            reader.Close()
            Response.Close()
            Dim obj As JObject = JObject.Parse(responseFromServer)
            Dim objarray As JArray = JArray.Parse(obj.SelectToken("results").ToString)
            Dim temp As String = ""
            For Each results As JObject In objarray
                temp = temp & results.SelectToken("id").ToString() & ", "
            Next
            MsgBox(temp)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub