解码包含JSON字符串的JSON字符串

4

我需要解码一个包含另一个JSON字符串的JSON字符串。目前我尝试使用System.Web.Script.Serialization中的Serializator.Deserialize<Dictionary<string,string>>(value)将其解码为Dictionary<string,string>,但是没有成功。

这是字符串:

{
      "label": "Side",
      "options": [
        {
          "key": "left",
          "value": 0
        },
        {
          "key": "right",
          "value": 1
        }
      ]
}

以下是解码器给出的格式错误:

(System.ArgumentException HResult=0x80070057 Message=无效的对象传递,应为“:”或“}”。(34):{"label": "Side", "options": "[{"key": "left", "value": 0},{"key":"right", "value":1}]"} Source=System.Web.Extensions) 这意味着他把"[{""作为字符串获取了,并且因此失败了...

有没有办法可以解码这个特定的JSON字符串并将其存储在一个对象中?客户对此JSON格式非常具体...非常感谢。


3
似乎你收到了无效的 JSON,这很麻烦…… - Matt Jameson
您可能需要预先解析JSON,使其能够传递到反序列化器中。 - Phil Cooper
tag info 中有一个指向 jsonlint 的链接。它是一个很好的验证和格式化工具。 - Bakudan
JSON字符串无效。请使用jsonlint进行更正。 - Muhammad Faisal
3个回答

2

请将您的json数据按照以下方式表示:

{
  "label": "Side",
  "options": "[{ 'key': 'left', 'value': '0'},{ 'key':'right', 'value':1}]"
}

单引号内的JSON

假设您有以下两个类:

public class YourObject
    {
        public string label { get; set; }
        public string options { get; set; }
    }
    public class InsideObject
    {
        public string key { get; set; }
        public int value { get; set; }
    }

所以你的json有一个字符串形式的另一个json在键"options"下,你可以像这样提取它们:

 string json = "{\"label\": \"Side\", \"options\": \"[{ 'key': 'left', 'value': '0'},{ 'key':'right', 'value':1}]\"}";
 var jsonObj = JsonConvert.DeserializeObject<YourObject>(json);
 var insideObj = JsonConvert.DeserializeObject<InsideObject>(jsonObj.options);

P.S here used Newtonsoft


1
不起作用...一旦到达第一个单引号,反序列化程序就认为那是字符串的结尾,并抛出错误,因为这是一种无效的JSON字符串结束方式。 - ACleCas
我认为提议像这样表示你的json(并将对象存储为字符串)与在任何地方使用_Object_一样:D - Markus Safar
我同意你的看法。我只是回答了他的问题:“包含另一个JSON字符串的字符串”。 - godot

0

最终我使用了以下的字符串格式:

{
  "label": "Side",
  "options": [
    {
      "key": "left",
      "value": 0
    },
    {
      "key": "right",
      "value": 1
    }
  ]
}

并将所有的JSON存储在一个Dictionary< string, object >中。然后我将实现一个方法来解码JSON内部的对象。


-1

正如马特在他的评论中提到的那样,你的JSON无效,应该是[{"key"而不是"[{"key",而且应该是}]}而不是}]"}


只要能从down votes中学到东西(没有评论是不可能的),我对down votes完全没有问题。 - Markus Safar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接