2014-02-23 108 views
0

MY JSON字符串json.parse允许空或丢失

{ 

"name": "username", 
"status": "mystatus", 
"place": { 
"name": "placename", 
}  

我的代码

Dim request As HttpWebRequest 
    Dim response As HttpWebResponse = Nothing 
    Dim reader As StreamReader 

    Try 

     request = DirectCast(WebRequest.Create("http://myjsonstring.com/json"), HttpWebRequest) 

     response = DirectCast(request.GetResponse(), HttpWebResponse) 
     reader = New StreamReader(response.GetResponseStream()) 

     Dim rawresp As String 
     rawresp = reader.ReadToEnd() 

     Dim jResults As JObject = JObject.Parse(rawresp) 
     if (rawresp != null) 
      name.Text = jResults("name").ToString() 
      status.Text = jResults("status").ToString() 
      placename.Text = jResults("place")("name").ToString() 

    End If 

    Catch ex As System.Net.WebException 
     MsgBox(ex.ToString) 

    Finally 
     If Not response Is Nothing Then response.Close() 

    End Try 

我的问题是,有时我的JSON可能看起来像这样

{ 

"name": "username", 
"place": { 
"name": "placename", 
} 

我的JSON解释

"name": "name here", 
    "items": { 
    "myitem": { 
     "icon": "myitem.jpg", 
    "myitem2": { 
     "icon": "myitem2.jpg", 
} 

我的代码我已经试过

myitem.Text = If(jResults2("items")("myitem")("icon") Is Nothing, "", jResults2("items")("myitem")("icon").ToString()) 
myitem2.Text = If(jResults2("items")("myitem2")("icon") Is Nothing, "", jResults2("items")("myitem2")("icon").ToString()) 

当值从myitem缺少它停止JSON和myitem2永远不会显示。

发生这种情况我的项目抛出一个空值异常,我已严厉地压缩了我的json字符串和代码的可读性,但我的问题是有一种方法来处理错误,当“状态”从字符串中丢失并继续解析其余的对象?

或者,如果它可能的时候这个值是缺失/ null替换它的东西,但如果这条路线被选中,我想为每个设置一个不同的值。

+1

在执行'.ToString()'之前,检查'jResults(“status”)'为null('Nothing')。 –

回答

1

在做.ToString()之前检查jResults("status")和其他属性是否为空(Nothing)。

Dim jResults As JObject = JObject.Parse(rawresp) 
name.Text = If(jResults("name") Is Nothing, "", jResults("name").ToString()) 
status.Text = If(jResults("status") Is Nothing, "", jResults("status").ToString()) 
placename.Text = If(jResults("place") Is Nothing, "", jResults("place")("name").ToString()) 
+0

非常感谢你 – ids

+0

啊,它似乎没有工作,因为它的唯一的返回空值,即使当状态是在字符串 谢谢 – ids

+0

所以,如果你改变了'status.Text = If(jResults (“status”)是Nothing,“”,jResults(“status”)。ToString())'回到'status.Text = jResults(“status”)。ToString()',它的工作原理? –