这个1行代码有什么问题?

时间:2017-11-05 16:41:40

标签: json vb.net json.net

dim json2=Newtonsoft.Json.Linq.JObject.Parse("[{""currency_code"":""1ST"",""cash"":""0"",""reserved"":""0""},{""currency_code"":""8BT"",""cash"":""0"",""reserved"":""0""}]")

双引号只是转义字符。实际的字符串是

[{"currency_code":"1ST","cash":"0","reserved":"0"},{"currency_code":"8BT","cash":"0","reserved":"0"}]

你可以看到的是一个合法的json。 基本上它看起来像一个合法的json数组。我想把它变成一个字符串数组

基本上我想把它变成

{
"{""currency_code"":""1ST"",""cash"":""0"",""reserved"":""0""}",
"{""currency_code"":""8BT"",""cash"":""0"",""reserved"":""0""}"
}

首先我将其解析为一个工作项并且............我失败了。

这是一个合法的json。为什么我无法将其解析为作业?

一些背景。

我创建了2个json帮助函数来帮助我解析任何json。一个将json转换为字典。另一个解析json到数组。实际上,整个json是字典(嵌套或非嵌套)或数组(嵌套或非嵌套)。我对这个问题是否正确?

现在代码是:

Public Shared Function jObjectToDictionary(json As String) As Generic.Dictionary(Of String, String)
    Dim json1 = JObject.Parse(json)
    Dim dict = json1.ToObject(Of Generic.Dictionary(Of String, Object))
    Dim dict2 = dict.ToDictionary(Function(x) x.Key, Function(x) x.Value.ToString)
    Return dict2
End Function

Public Shared Function jObjectToArray(json As String) As Generic.List(Of String)
    Dim json2 = JObject.Parse(json)
    Dim ar = json2.ToObject(Of Generic.List(Of Object))
    Dim ar2 = ar.ConvertAll(Function(x) x.ToString)
    Return ar2
End Function

代码类型有效。

然后我做了

    Dim jsonar = jsonHelper.jObjectToDictionary(_jsonResult)(starttoken) 'works
    Dim ar1 = jsonHelper.jObjectToArray(jsonar) 'doesn't work

然后我检查为什么jObjectToArray不起作用,它导致我认为应该工作的这一行代码但是没有。

这就是我的要求。如果你可以解决这个行代码的问题,我可以解决其余问题。

1 个答案:

答案 0 :(得分:1)

JObject.Parse失败的原因是因为您的JSON代表对象的数组,而不仅仅是单个对象。您可以判断,因为JSON以方括号[]开头和结尾,而花括号{}则表示单个对象。要解析数组,您需要使用JArray.Parse。 (注意,您也可以使用JToken.Parse - 它将解析单个对象或数组。)

Dim json2 = Newtonsoft.Json.Linq.JArray.Parse("[{""currency_code"":""1ST"",""cash"":""0"",""reserved"":""0""},{""currency_code"":""8BT"",""cash"":""0"",""reserved"":""0""}]")

演示小提琴:https://dotnetfiddle.net/hZlc3m