【问题标题】:Why are there invalid characters in this JSON?为什么这个 JSON 中有无效字符?
【发布时间】:2014-07-31 17:03:16
【问题描述】:

我的 JSON 看起来像这样:

{
  "Master" : {
    "Major" : "S",
    "Minor" : "E",
    "IPAddress" : "0.0.0.0",
    "Detail":"<root>
               <key keyname=\"state\">3</key>   
               <key keyname=\"oldState\">1</key>        
               <key keyname=\"currency\"></key>
               <key keyname=\"denomination\"></key></root>",    
    "SourceCreateDate" : "2014-04-03T14:02:57.182+0200"
   },
   "Messages" : [{
    "MessageCode" : "0",                    
    "MessageType" : "8"
   }]
}

我在验证时收到“发现无效字符”错误。无效字符在哪里?如何使这个 JSON 有效?

【问题讨论】:

    标签: json validation


    【解决方案1】:
    {
    "Master": {
        "Major": "S",
        "Minor": "E",
        "IPAddress": "0.0.0.0",
        "Detail": "<root><key keyname=\"state\">3</key><key keyname=\"oldState">1</key><key keyname=\"currency\"></key><key keyname=\"denomination\"></key></root>",
        "SourceCreateDate": "2014-04-03T14:02:57.182+0200"
    },
    "Messages": [
        {
            "MessageCode": "0",
            "MessageType": "8"
        }
    ]
    }
    

    JSON 验证器:http://jsonlint.com/

    编辑:说明:当您打开" 时,您需要在同一行关闭它。所以你必须把你的 xml 放在一行或者转义它。

    【讨论】:

    • 这显示了 OP 的 JSON 工作的正确格式,但没有解释任何内容 - 为什么这有效而 OP 不起作用?阅读 other 答案可以清楚为什么这是正确的,但这个答案应该独立存在。
    【解决方案2】:

    JSON 只接受单行字符串。

    解决方法是:

    "Detail": [
        "<root>",
        ",<key keyname=\"state\">3</key>", 
        "<key keyname=\"oldState\">1</key>",        
        "<key keyname=\"currency\"></key>",
        "<key keyname=\"denomination\"></key></root>"
    ], 
    

    您还可以选择将换行符替换为\n

    【讨论】:

      【解决方案3】:

      无效字符是“详细信息”元素中的换行符。你需要逃离他们。类似于here 提出的解决方案应该可以工作。

      【讨论】:

        【解决方案4】:

        试试这个,

        {
            "Master": {
                "Major": "S",
                "Minor": "E",
                "IPAddress": "0.0.0.0",
                "Detail": "<root><key keyname=\"state\">3</key><key keyname=\"oldState\">1</key><key keyname=\"currency\"></key><key keyname=\"denomination\"></key></root>",
                "SourceCreateDate": "2014-04-03T14:02:57.182+0200"
            },
            "Messages": [
                {
                    "MessageCode": "0",
                    "MessageType": "8"
                }
            ]
        }
        

        我认为那里有一些隐藏的垃圾字符,例如下一行(换行符)或制表符空格等。这就是它给出错误的原因。所以请确保“详细信息”键将出现在单行中

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-26
          • 2020-02-23
          • 2019-09-18
          • 1970-01-01
          相关资源
          最近更新 更多