2011-05-06 306 views
2

我试图解析使用JSON.NET解析JSON阵列

[[{"event_timestamp":1304587800,"event_time_8601":"2011-05-05T19:00:00+09:30","event_date":"Thursday, May 5th, 2011","event_time":"7:00 pm","venue_phone":"","event_notes":"","event_id":"2690119","links":[{"link_url":"http:\/\/tickets.sonicliving.com\/event\/2690119\/sl-tickets","link_title":"7:00 pm","link_type":"ticket"}],"event_title":"Justin Bieber","rsvp":"3","venue_id":"83659","venue_name":"Entertainment Centre Adelaide","venue_address":"","lat":"0","lon":"0","poster_url_large":"http:\/\/posters.sonicliving.com\/event\/2690119\/poster.png","poster_url_small":"http:\/\/posters.sonicliving.com\/event\/2690119\/smallposter.png","venue_city":"Adelaide","venue_state":"05","venue_country":"AU","eid":"181570318520944","eids":[0],"facebook_event_url":"http:\/\/www.facebook.com\/event.php?eid=181570318520944"}],[{"event_timestamp":1304766000,"event_time_8601":"2011-05-07T19:00:00+08:00","event_date":"Saturday, May 7th, 2011","event_time":"7:00 pm","venue_phone":"","event_notes":"","event_id":"2690126","links":[{"link_url":"http:\/\/tickets.sonicliving.com\/event\/2690126\/sl-tickets","link_title":"7:00 pm","link_type":"ticket"}],"event_title":"Justin Bieber","rsvp":"0","venue_id":"76921","venue_name":"Burswood Theatre","venue_address":"Great Eastern Highway","lat":"0","lon":"0","poster_url_large":"http:\/\/posters.sonicliving.com\/event\/2690126\/poster.png","poster_url_small":"http:\/\/posters.sonicliving.com\/event\/2690126\/smallposter.png","venue_city":"Perth","venue_state":"08","venue_country":"AU","eid":"173126412708252","eids":[0],"facebook_event_url":"http:\/\/www.facebook.com\/event.php?eid=173126412708252"}]] 

我试过下面的代码此阵,但我得到的却是一个例外:

Dim jResults As JArray = JArray.Parse(strJResults) 

MessageBox.Show("You have " & jResults.Count & " results") 

For Each jTok As JToken In jResults 
    txtResult.Text = txtResult.Text & vbCrLf & jTok.Item("event_date").ToString() 
Next 
System.ArgumentException was unhandled 
    Message="Accessed JArray values with invalid key value: "event_date". Array position index expected." 
    Source="Newtonsoft.Json.Net35" 
    StackTrace: 
     at Newtonsoft.Json.Linq.JArray.get_Item(Object key) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Linq\JArray.cs:line 187 
     at JSONNetTest.frmMain.frmMain_Load(Object sender, EventArgs e) in C:\Users\John Meyer\Documents\Visual Studio 2008\Projects\JSONNetTest\JSONNetTest\frmMain.vb:line 25 
     at System.EventHandler.Invoke(Object sender, EventArgs e) 
     at System.Windows.Forms.Form.OnLoad(EventArgs e) 
     at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 
     at System.Windows.Forms.Control.CreateControl() 
     at System.Windows.Forms.Control.WmShowWindow(Message& m) 
     at System.Windows.Forms.Control.WndProc(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
     at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
    InnerException: 

任何想法?

回答

1

消息“预期阵列位置索引”是线索解决这个。 (它说:“嘿,我是一个阵列别再问我命名的属性!”)

在格式再看看:

[ [{...}], [{...}] ] 

与“EVENT_DATE”每个对象都是嵌套在它自己的阵列(一个元件),它是依次外阵列的元件。在可以访问“event_date”属性之前,该辅助数组也需要下降到。

考虑那么访问应该是:

jTok.Item(0).Item("event_date") 

编码愉快。

+0

感谢。这不是我一直在看的那些简单训练数组中的一种。 – pueblonative 2011-05-06 01:04:43

-1
Sub Button5Click(sender As Object, e As EventArgs) 
Dim APP As New Excel.Application 
    Dim worksheet As Excel.Worksheet 
    Dim worksheet2 As Excel.Worksheet 
    Dim LastRow As Integer 
      Dim workbook As Excel.Workbook 

      Dim sourceString As String 
      Dim url As String 

      Dim i As Integer 

      Dim wc As New System.Net.WebClient 

      workbook = App.Workbooks.Open(room.Text) 
      worksheet = workbook.Worksheets("sheet1") 
      worksheet2 = workbook.Worksheets("sheet2") 
      LastRow = worksheet.UsedRange.Rows.Count   

      For rrow As Integer =2 To LastRow 
       url = CStr(worksheet.Cells(rrow, 1).Value) 
       ' MsgBox(url) 
      Try   

       wc.Headers("User-Agent")="Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3" ' In my case user agent was table. 
       sourceString = wc.DownloadString(url) 
       sourceString=sourceString.Trim() 
       'MsgBox(sourceString) 
       row.Text="URL# " & rrow-1 & " is getting processed" 
       urlno.Text=url 

       Dim allData As JArray = JArray.Parse(sourceString) 
       i=0 
       Try 
        For i=0 To allData.Count-1 

        Dim token As JToken=allData.First 


        Do Until token Is Nothing 

         msgbox(token.Item("text").ToString()) 



        msgbox(allData.Count & i+1) 
        token=token.Next 
        Loop 
        Next 


       Catch ex As Exception 
        worksheet.Cells(rrow, 2).Value=ex.ToString() 
        MsgBox(ex.ToString()) 

       End Try 

      Catch Outerex As Exception 
       worksheet.Cells(rrow,2).Value="Unexpected Error" 
       MsgBox(Outerex.ToString()) 
      End Try 

      Next 
      MsgBox ("Done")  
      workbook.Save() 
      workbook.Close()  
      App.Quit()  
    End Sub 
+0

小心添加一些评论,关于你在做什么? – Nishant 2015-08-07 02:15:53

+0

这段代码与这个问题有什么关系? – 2015-08-07 13:18:04