2017-12-21 6 views
0

일부 JSON 코드를 구문 분석하기 위해 vb.net windows 폼 응용 프로그램을 사용하려고합니다. 내 코드를 잘 빌드하고 컴파일하지만 단추를 클릭하는 순간 예외가 발생합니다.vb.net을 사용하여 예외가있는 json 코드를 통해 구문 분석

Newtonsoft.Json.JsonReaderException : 'NaN 값을 파싱하는 중 오류가 발생했습니다. 경로 ', 줄 1, 위치 1' 나는 그것을 해결하기 위해 노력했다

For Each item As JObject In JArray.Parse(jsonObjects.SelectTokens("items").ToString) 

,하지만 난 방법을 더 이상 모르는 :

예외는 내 코드의 끝 부분에이 줄을 가리키고 있습니다. 당신은 루프 시작에 예외에 도착하기 전에 매우 유용 아무것도에서이 늘 결과

Imports Newtonsoft.Json 
Imports Newtonsoft.Json.Linq 

Public Class Form1 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Dim jsonString As String = "{""id"":1, ""name"":""tom"", 
""items"":[ 
    {""name"":""apple"", ""count"":1 }, 
    {""name"":""milk"", ""count"":2 } 
] 
}" 
     Dim jsonObjects As JObject = JObject.Parse(jsonString) 
     Console.WriteLine("id:" & jsonObjects.SelectTokens("id").ToString) 
     Console.WriteLine("name:" & jsonObjects.SelectTokens("name").ToString) 

     Console.WriteLine("items:" & jsonObjects.SelectTokens("items").ToString) 
     'Dim jsonArray As JArray = JArray.Parse(jsonObjects.SelectTokens("items").ToString) 
     For Each item As JObject In JArray.Parse(jsonObjects.SelectTokens("items").ToString) 
      Console.WriteLine("item:" & item.SelectTokens("name").ToString) 
     Next 
    End Sub 
End Class 
+2

예외가 항상 그들과 관련된 설명이있다; 당신은 그 정보를 공유하지 않으므로 우리가 어떤 문제를 해결하고 있는지 알 수 없습니다. 단순한 것보다 많은 것을 얻으 려한다면 NET 객체 컬렉션으로 비 직렬화하는 것이 더 쉬울 수도 있습니다. – Plutonix

+0

예외에 대한 세부 정보를 추가하면 다른 사람들이 귀하의 질문을 분석하는 데 도움이됩니다. JSON을 올바르게 역 직렬화 할 수 있도록 사용자 정의 핸들러를 추가해야 할 수도 있습니다. Newtonsoft.Json.JsonConverter 클래스를 살펴보십시오. – tatmanblue

+0

아마도 3 개의 WriteLine 결과를 백업하고 검사하고 싶을 것입니다. SelectTokens는 JToken과 ToString()의 IEnumerable을 리턴합니다. – Plutonix

답변

0

I am trying to ... parse through some JSON

:

Console.WriteLine("id:" & jsonObjects.SelectTokens("id").ToString) 

SelectTokensIEnumerable(Of Newtonsoft.Json.Linq.JToken)를 반환 여기 내 코드입니다. 당신이 아마 NET 객체 또는 컬렉션에 역 직렬화하기 쉬울 것 JSON 전역에서 여러 항목을 원하는 경우

Newtonsoft.Json.Linq.JsonPath.FieldFilter+<ExecuteFilter>d__0 

,하지만 당신은 무엇을 요구하지 이잖아 : ToString로 표시하려고하면 바로 발생합니다.

Dim jobj = JObject.Parse(Candyjson) 

' print the Id, name and how many items there are 
Console.WriteLine("Id: {0} Name: {1} has {2} Items", jobj("id"), jobj("name"), 
        jobj("items").Count) 

' print each item name and how many there are 
For n As Int32 = 0 To jobj("items").Count - 1 
    Console.WriteLine("Item: {0}, Count: {1}", 
          jobj("items")(n)("name"), 
          jobj("items")(n)("count") 
          ) 
Next 

결과 : 이것은 톰이 항목을 나열합니다

ID : 1 이름 : 톰이 두 항목
항목이 있습니다 : 사과, 개수 : 1
항목 : 우유, 개수 : 2

JSON을 구문 분석하면 결과 JObject에 JSON의 내용에 따라 여러 가지 사항이 포함됩니다. 중단 점을 설정하고 jobj을 검사하면 결과는 JSON (문자열)로 거의 같은 모양, 그러나 당신이 조회 할 수있는 형태입니다 :

enter image description here