2016-10-19 5 views
0

Google에서 사용할 수있는 쿼리를 사용하려고하지만 JSON 결과가 포함 된 첨부 된 txt 파일을 반환합니다. 저는 초보자 프로그래머입니다. 그래서 내가 찍은 장면이 왜 작동하지 않는지 알 수는 없습니다.json을 포함하는 txt 스트림 웹 요청을 jObject로 변환하는 방법은 무엇입니까?

public async Task<YouTubeSearchResult> SearchYouTubeAsync(string query) 
    { 
     var result = new YouTubeSearchResult(); 
     string errorMessage = ""; 
     try 
     { 
      string encodedName = WebUtility.UrlEncode(query); 
      Uri url = new Uri($"http://suggestqueries.google.com/complete/search?client=firefox&ds=yt&q={encodedName}"); 
      HttpClient client = new HttpClient(); 
      Stream streamResult = await client.GetStreamAsync(url); 
      StreamReader reader = new StreamReader(streamResult); 

      errorMessage = JsonConvert.SerializeObject(reader.ReadToEnd()); 
      JObject jsonResults = JObject.Parse(JsonConvert.SerializeObject(reader.ReadToEnd())); 

      result.Success = true; 
      result.Message = "Success getting search results"; 
      result.SearchResults = jsonResults; 
     } 
     catch (Exception ex) 
     { 
      result.Success = false; 
      result.Message = $"Server error getting search results: {errorMessage} | {ex}"; 
      result.SearchResults = null; 
     } 

     return result; 

    } 
} 

이것은 내가 얻는 오류 코드와 함께 응답입니다.

{ 
    "success": false, 
    "message": "Server error getting search results: \"[\"search\",[\"search\",\"search and destroy\",\"searching for my baby bobby moore\",\"search engine optimization\",\"search and discard\",\"search for the worst\",\"search youtube\",\"searching\",\"search history\",\"search party sam bruno\"]]\" | Newtonsoft.Json.JsonReaderException: Error reading JObject from JsonReader. Current JsonReader item is not an object: String. Path '', line 1, position 2.\r\n at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)\r\n at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)\r\n at OdsCode.Services.YouTubeSearchService.<SearchYouTubeAsync>d__3.MoveNext()", 
    "searchResults": null 
} 

명확성을 위해 오류 및 현재 결과를 개별적으로 추가하십시오.

| Newtonsoft.Json.JsonReaderException : JsonReader에서 JObject를 읽는 중 오류가 발생했습니다. 현재 JsonReader 항목이 object가 아닙니다 : String. Path '', 줄 1, 위치 2에 있습니다. \ New \ n \ 012 \ n \ 012 \ JSON, JsonLoadSettings 설정) \ 연구 \ n OdsCode.Services.YouTubeSearchService.d__3.MoveNext() ",

"서버 오류 받고 검색 결과에서 : \ "[\"검색 \ "[\"검색 \ "검색 및 폐기 \", \ " 베이비 바비 무어 \", \ "검색 및 삭제 \", \ " 최악의 \", \ "검색 유튜브 \", \ " 검색 엔진 최적화 \ ", \"검색 \ ", \"검색 내역 \ ", \"검색 자 sam bruno \ "]] \"|

다음

은 우체부에 내가 구글에서 얻는 반응이다

http://suggestqueries.google.com/complete/search?client=firefox&ds=yt&q=search 

Cache-Control →no-cache, must-revalidate 
Content-Disposition →attachment; filename="f.txt" 
Content-Encoding →gzip 
Content-Length →136 
Content-Type →text/javascript; charset=UTF-8 
Date →Wed, 19 Oct 2016 20:10:17 GMT 
Expires →-1 
Pragma →no-cache 
Server →gws 
X-Frame-O 

ptions →SAMEORIGIN 
X-XSS-Protection →1; mode=block 

[ 
    "search", 
    [ 
    "search", 
    "search and destroy", 
    "searching for my baby bobby moore", 
    "search engine optimization", 
    "search and discard", 
    "search for the worst", 
    "search youtube", 
    "searching", 
    "search history", 
    "search party sam bruno" 
    ] 
] 

내가 지금 일 동안 그것을하고 도와 ...이 알아낼 때까지 아니 음식 !!!!!

+0

를 사용해야합니다 읽을하기 위해 있도록 받고있는 데이터처럼 보이는 배열입니다. 'JsonConvert.SerializeObject'를 사용하지 마십시오. 'JObject.Parse (reader.ReadToEnd())'가 전부입니다. (object2json -> serialization 및 json2object -> deserialization) –

+0

→ Newtonsoft.Json.JsonReaderException : JsonReader에서 JObject를 읽는 중 오류가 발생했습니다. Newtonsoft.Json.Linq.JObject.Parse (String json, JsonLoadSettings())에서 Newtonsoft.Json.Linq.JObject.Load (JsonReader 판독기, JsonLoadSettings 설정)의 \ 0 \ 설정) \ r \ n OdsCode.Services.YouTubeSearchService. d__3.MoveNext() – Matt

답변

1

문제 1 - reader.ReadToEnd()을 두 번 사용합니다. 먼저 errorMessage를 읽으려고 할 때, 다음 줄에서 다시 사용합니다. 두 번째로 이미 모든 것을 읽었습니다. 라인 삭제 :

errorMessage = JsonConvert.SerializeObject(reader.ReadToEnd()); 

문제 두 - 당신은 당신은 끝을 받고

JArray jsonResults = JArray.Parse(reader.ReadToEnd()); 
+0

JArray가 트릭을 수행했습니다! 정말 고맙습니다!!!!!!!!! – Matt

관련 문제