无法使用 JSON.parse 解析来自 textarea 元素的有效 JSON

Posted

技术标签:

【中文标题】无法使用 JSON.parse 解析来自 textarea 元素的有效 JSON【英文标题】:Unable to parse valid JSON from textarea element with JSON.parse 【发布时间】:2021-05-12 14:22:05 【问题描述】:

This question、this one 和类似的没有帮助。

下面的 JSON 是有效的。

但是,调用 JSON.parse 会引发错误。

如何从 textarea 元素中解析有效的 JSON?

JSfiddle:https://jsfiddle.net/6gpdL81e/

let text = document.getElementById("testBox").value;
let jsonObject = JSON.parse(text);
<textarea id="testBox">
    
      
      "name": "Foobar",
      "favorite_pets": ["capybara", "lizard"],
      "favorite_fruits": ["avocado"],
      "address": 
       "city": "FairyVille",
       "street": "42 Main St."
      
    
    
    </textarea>

【问题讨论】:

您的某些空白字符有问题。 您推荐什么作为解决方案?用户像这样上传文本,所以我们需要一些自动化机制来清理文本。只需删除所有前导/尾随空格? 您可以$('#testBox').val().replace(/[^!-~]/g, ''); 有效地删除字符范围 33-126 之外的所有字符,但实际上我不会清理它,如果解析失败,只会向用户返回错误.因为可能存在您必须处理的有效解析错误。 【参考方案1】:

这是因为 jQuery 使用不间断空格 nbsp 或 charcode \xA0 不是正常空格。你需要更换它。

let text = $('#testBox').val();
let jsonObject;
try 
  jsonObject = JSON.parse(text);
 catch (ex) 
  console.log("error: ", ex.message)

text = text.replace(/\xA0/g, " "); // or \s but will also replace newline
jsonObject = JSON.parse(text);
console.log("what the name: ", jsonObject.name)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea id="testBox">
  
  "name": "Foobar",
  "favorite_pets": ["capybara", "lizard"],
  "favorite_fruits": ["avocado"],
  "address": 
   "city": "FairyVille",
   "street": "42 Main St."
  


</textarea>

【讨论】:

以上是关于无法使用 JSON.parse 解析来自 textarea 元素的有效 JSON的主要内容,如果未能解决你的问题,请参考以下文章

“意外的标记 。” JSON Parse 无法解析前导零的十进制

JSON.parse() 方法解析一个JSON字符串

使用 JSON.parse 方法解析数据时 JSON 中位置 0 错误的意外令牌'

JSON.parse() 与 JSON.stringify()

JSON.parse()

Json.parse()