0

HTTP リクエストからの JSON レスポンスがあり、パズルの最後のピースをまとめることができません... 必要なことの 90% を解決しましたが、今は行き詰まり、手がかりが見つかりません。他の場所。

以下は私が得る応答です:

{
  "adult": false,
  "backdrop_path": "/mOTtuakUTb1qY6jG6lzMfjdhLwc.jpg",
  "belongs_to_collection": {
    "backdrop_path": "/mOTtuakUTb1qY6jG6lzMfjdhLwc.jpg",
    "id": 10,
    "name": "Star Wars Collection",
    "poster_path": "/6rddZZpxMQkGlpQYVVxb2LdQRI3.jpg"
  },
  "budget": 11000000,
  "genres": [
    {
      "id": 28,
      "name": "Action"
    },
    {
      "id": 14,
      "name": "Fantasy"
    },
    {
      "id": 878,
      "name": "Science Fiction"
    }
  ],
  "homepage": "http://www.starwars.com",
  "id": 11,
  "imdb_id": "tt0076759",
  "original_title": "Star Wars: Episode IV: A New Hope",
  "overview": "Princess Leia is captured.",
  "popularity": 84.8,
  "poster_path": "/qoETrQ73Jbd2LDN8EUfNgUerhzG.jpg",
  "production_companies": [
    {
      "id": 1,
      "name": "Lucasfilm"
    },
    {
      "id": 8265,
      "name": "Paramount"
    }
  ],
  "production_countries": [
    {
      "iso_3166_1": "TN",
      "name": "Tunisia"
    },
    {
      "iso_3166_1": "US",
      "name": "United States of America"
    }
  ],
  "release_date": "1977-12-27",
  "revenue": 775398007,
  "runtime": 121,
  "spoken_languages": [
    {
      "iso_639_1": "en",
      "name": "English"
    }
  ],
  "tagline": "A long time ago in a galaxy far, far away...",
  "title": "Star Wars: Episode IV: A New Hope",
  "vote_average": 8.8,
  "vote_count": 75
}

Newtonsoft Json を使用すると、「belongs_to_collection」の部分を除いて必要なものをすべて取得できます...これまでのコードは次のようになります。

    Dim jsonResults As JObject = JObject.Parse(searchResults)
    Dim genreItems As JArray = DirectCast(jsonResults("genres"), JArray)
    Dim productionCompaniesItems As JArray = DirectCast(jsonResults("production_companies"), JArray)


    Dim release_Date As String = CStr(jsonResults.SelectToken("release_date"))
    Dim overview As String = CStr(jsonResults.SelectToken("overview"))
    Dim homepage As String = CStr(jsonResults.SelectToken("homepage"))
    Dim tagline As String = CStr(jsonResults.SelectToken("tagline"))
    Dim imdb_id As String = CStr(jsonResults.SelectToken("imdb_id"))

    Dim vote_Average As String = CStr(jsonResults.SelectToken("vote_average").ToString)
    Dim popularity As String = CStr(jsonResults.SelectToken("popularity").ToString)
    Dim vote_Count As String = CStr(jsonResults.SelectToken("vote_count").ToString)
    Dim revenue As String = CStr(jsonResults.SelectToken("revenue").ToString)
    Dim runtime As String = CStr(jsonResults.SelectToken("runtime").ToString)
    Dim budget As String = CStr(jsonResults.SelectToken("budget").ToString)
    Dim adult As Boolean = CBool(jsonResults.SelectToken("adult"))

        Dim item As JObject
        Dim jtoken As JToken

        'Genre List

        For i As Integer = 0 To genreItems.Count - 1

            item = DirectCast(genreItems(i), JObject)
            jtoken = item.First

            While jtoken IsNot Nothing

                Dim jProperty = DirectCast(jtoken, JProperty).Name.ToString()

                If jProperty = "name" Then
                    'Debug.Print("Genres: " & DirectCast(jtoken, JProperty).Value.ToString())
                End If

                jtoken = jtoken.[Next]

            End While

        Next

最後のピースを完成させることができるように、私を正しい方向に向けることができる人はいますか?

ありがとう

編集

    Dim collection As JObject = DirectCast(jsonResults("belongs_to_collection"), JObject)
    Dim id As String = CStr(collection.SelectToken("id").ToString)

「belongs_to_collection」にデータが含まれている場合は実際に機能しますが、エラーがない場合はエラーになります。

Unable to cast object of type 'Newtonsoft.Json.Linq.JValue' to type 'Newtonsoft.Json.Linq.JObject' 

何かを取得しようとする前に、データが含まれているかどうかをテストするにはどうすればよいですか?

編集2 OK、今はソートされています...以前にこれを試してみましたが、うまくいきませんでしたが、今はうまくいっているようです。解決策は次のとおりです。

        Dim test_Collection As String = CStr(jsonResults.SelectToken("belongs_to_collection").ToString)

    If test_Collection = "" Then
        Console.WriteLine("--- NOTHING ---")
    Else
        Dim collection As JObject = DirectCast(jsonResults("belongs_to_collection"), JObject)
        Dim id As String = CStr(collection.SelectToken("id").ToString)
        Console.WriteLine(id)
    End If

ありがとう

4

2 に答える 2

1

これは機能しますか?

Dim collection As JObject = DirectCast(jsonResults("belongs_to_collection"), JObject)

次に、最上位の JObject に対して行っているのと同じように、コレクション JObject から残りを取得しますか?

于 2012-05-16T16:35:57.143 に答える
0

C# に慣れている場合は、wattmdbライブラリーをのぞいてみてください。これは、あなたと同じことをしている TMDB API ラッパー ライブラリです。

于 2012-05-26T18:45:26.833 に答える