Json.Array()只解析数组中的最终值? [C#](解决方案:单个对象中的重复值)

时间:2016-01-01 21:15:06

标签: c# arrays json

我目前有一个JSON文件,如下所示(我删除了很多重复值,但结构相同)。

    [{
"page" : {
    "currentPageNumber" : "page1",
    "pageTextLocation" : "\\Assets\\Stories\\Story 1\\Chapter1\\",
    "decision":[{
        "activeDecision" : true,
        "nextPage" : "Page2",
        },
        {
        "activeDecision" : true,
        "nextPage" : "Page2",
        },
        {
        "activeDecision" : true,
        "nextPage" : "Page2",
        }
    ]
    },
"page" : {
    "currentPageNumber" : "page2",
    "pageTextLocation" : "\\Assets\\Stories\\Story 2\\Chapter2\\",
    "decision":[{
        "activeDecision" : true,
        "nextPage" : "Page3",},
        {
        "activeDecision" : true,
        "nextPage" : "Page3",
        },
        {
        "activeDecision" : true,
        "nextPage" : "Page3",
        },
        {
        "activeDecision" : true,
        "nextPage" : "Page3",
        }]
    }}]

我可以确认JSON文件的全文正确加载到字符串值中。但是,当我将该值传递给JsonArray.Parse(loadedTextValue)时,返回值仅包含JSON文件中的最终数组。输出仅显示数组中的最后一个对象。如果有两个"页面"对象,它只会解析第二个。如果有三个"页面对象,它只会解析第三个。

但是,如果我更改"页面"的键值名称对于唯一的名称,解析器检测所有代码并将其转换为可用的数组值。以下数据完全加载到JsonArray值。

            [{
"page" : {
    "currentPageNumber" : "page1",
    "pageTextLocation" : "\\Assets\\Stories\\Story 1\\Chapter1\\",
    "decision":[{
        "activeDecision" : true,
        "nextPage" : "Page2",
        },
        {
        "activeDecision" : true,
        "nextPage" : "Page2",
        },
        {
        "activeDecision" : true,
        "nextPage" : "Page2",
        }
    ]
    },
"page2" : {
    "currentPageNumber" : "page2",
    "pageTextLocation" : "\\Assets\\Stories\\Story 2\\Chapter2\\",
    "decision":[{
        "activeDecision" : true,
        "nextPage" : "Page3",},
        {
        "activeDecision" : true,
        "nextPage" : "Page3",
        },
        {
        "activeDecision" : true,
        "nextPage" : "Page3",
        },
        {
        "activeDecision" : true,
        "nextPage" : "Page3",
        }]
    }}]

总结:要解析整个加载的文本文件,以便代码并遍历这些值,然后将其解压缩。

我完全没有关于这种行为的原因的想法。任何输入将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:3)

它不起作用,因为您有多个具有相同值的键。如果您查看JSONValue的文档,您将看不到任何接受密钥的方法。因此,不支持具有相同值的多个密钥。你必须改变你的JSON格式,比如说

[
  {
    "type": "page",
    "currentPageNumber": "page1",
    ...
  },
  {
    "type": "page",
    "currentPageNumber": "page2",
    ...
  },
  ...
]

这种方式Parse()将返回一个JSON对象数组。下一步是通过检查对象type选择正确的对象,如果它是page,则将对象处理为显示currentPageNumber的页面。