如何在可能是简单字符串或字符串对象的字符串对象上安全地使用 JSON.parse?

2024-04-16

我需要能够解析对象格式或纯字符串格式的字符串。最安全的方法是什么?

我尝试了 JSON.parse(data) 但如果数据是纯字符串,它就不起作用。


编辑-所选的解决方案

谢谢你,这就是我解决问题的方法:

try {
    dataObj = JSON.parse(data);
} catch (err) {
    if (typeof data === "object") {
        dataObj = data;
    } else {
        dataObj = {};
    }
}

为自己创建一个辅助函数并使用它。

function parseValue(value) {
    try
    {
        return JSON.parse(value);
    }
    catch (ex)
    {
        // JSON format was invalid
        // handle errors is you need to
    }

    return value;
}

如果您足够勇敢,您还可以扩展 String.prototype,这样调用它就会变得非常简单。

String.prototype.parseJSON = String.prototype.parseJSON || function() {
    try
    {
        return JSON.parse(this);
    }
    catch (ex)
    {
        // JSON format was invalid
        // handle errors is you need to
    }

    return this;
};

然后你可以简单地这样称呼它:

// string in a variable
var s = "Some non-JSON string";
s.parseJSON();
// string literal
'{"b":true,"n":1}'.parseJSON();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在可能是简单字符串或字符串对象的字符串对象上安全地使用 JSON.parse? 的相关文章

  • Google Adsense 中的 Javascript 错误

    在我的几个运行 AdSense 的网站上 我收到以下错误 无法将消息发布到 http googleads g doubleclick net http 5Dgoogleads g doubleclick net 收件人有来源http www
  • 如何在 JavaScript 中通过方括号访问私有字段

    这段代码的工作原理 class Test field get field return this field 但如果我想计算字段名称我必须使用方括号 但它不起作用 class Test field get field return this
  • 如何使用 Javascript 更改具有相同类名的多个元素?

    跟进至我之前的问题 https stackoverflow com q 42389937 2803565 我想使用 JS 使用按钮来显示 隐藏具有相同类名的多个元素 但似乎我只能更改具有特定类名的第一个元素 并且页面上具有相同类名的所有其他
  • 如何在rails 6 webpacker中添加jquery第三方插件

    我知道它很简单 但是随着 Rails 6 的更新 rails 6 中有新的语法用于管理由 webpacker 维护的 javascript 资源 application js require rails ujs start require
  • 释放 Javascript 中未附加 DOM 节点使用的内存

    作为我的应用程序的一部分 我将一组小型 Dom 节点放在一起 这些节点不会一次全部显示 我将它们存储在内部数组中 用户可以调用它们的显示 在这种情况下 我将它们重新设置为用于显示它们的 div 这一切都很好 但是 当需要用新的替换所有它们时
  • 对包含数字和字符串的数组进行排序

    我正在尝试对包含字符串 数字和数字作为字符串 例如 1 2 的数组进行排序 我想对这个数组进行排序 以便排序后的数组首先包含数字 然后包含包含数字的字符串 最后包含字符串 var arr 9 5 2 ab 3 1 to be sorted
  • 当用户输入时将输入值转换为货币格式

    我无法将输入值转换为货币格式 我想在用户键入数字 5 000 00 125 000 00 时自动添加千位和小数分隔符 这是我的代码 input CurrencyInput on blur focus keyup function this
  • 将字符串作为有序字典导入

    我有一个没有扩展名的文件 其中包含这样的行 忽略行之间的间距 但每一行都是单独的行 OrderedDict key1 u value1 key2 value2 OrderedDict key1 u value1 key2 value2 Or
  • Indexeddb 添加新值而不是更新现有值

    当尝试更新其中的记录时索引数据库使用put方法 看起来是创造了新的价值而不是改变 根据MDN https developer mozilla org en US docs Web API IDBObjectStore put这是更新记录的方
  • 自动播放视频的 canvas.drawimage 仅在视频元素可见时有效

    我试图通过将视频绘制到画布上来在视频上添加一些滤镜 问题是 当视频元素不在视图中时 它会停止绘制 理想情况下 我想将视频元素全部隐藏起来 我认为它只影响 Chrome 浏览器 另外 似乎如果您停止并用鼠标启动它 问题就会消失 functio
  • getUserMedia 在 chrome 版本 48.0.2560.0 中无法工作,而在 46.0 中工作

    我的困惑是 我在我的页面中使用了 gerUSerMedia 该页面无法在我们的服务器上工作 而在某些机器上 在那些 chrome 浏览器中具有版本为 48 0 2560 0 的 chrome 时 它 将给出以下警告 getUserMedia
  • 如果未登录则重定向 html 页面

    我的网页上有简单的登录表单 它使用 javascript 来登录用户并且工作正常 问题是 用户直接在地址栏中输入登陆页面 URL 他无需登录即可直接访问该页面 如果他没有登录 我想将他重定向到登录页面 以下是loding和目标页面的链接 l
  • Karate UI 中的 ShadowRoot dom 元素访问问题

    我正在尝试访问 ShadowRoot dom 树元素 但我面临的问题是我无法使用特定的 html 元素来调用 ShadowRoot 因为该元素是动态的 请参见下面的 html 片段 id vaadin text field error 0
  • Parse JS SDK:无法使用主密钥,尚未提供

    我需要在我的 angular2 应用程序中使用 masterKey 但我无法将其传递给initialize功能 我无法用谷歌搜索出原因 从package json parse 1 9 2 初始化 import Parse from node
  • DASM 汇编器中的 ASCII 到 C64 屏幕代码

    我正在通过 C64 模拟器学习 6502 micro 的汇编 目前正在尝试将字符串输出到屏幕 这是我的代码 processor 6502 org 1000 ldx 00 using x register as column counter
  • 优化Gson反序列化

    优化反序列化的最佳方法是什么 我目前正在使用标准 Gson toJson 和 Gson fromJson 方法来序列化和反序列化一些复杂对象 我希望尽可能减少反序列化时间 如果重要的话 我的最复杂的对象包含 43 个变量 如果你想使用 Gs
  • 在 Scala 中有效地重复字符/字符串 n 次

    我想更有效地执行以下操作 def repeatChar char Char n Int List fill n char mkString def repeatString char String n Int List fill n cha
  • 是否可以知道函数是否使用空返回语句?

    是否有可能知道函数是否使用空 return 语句还是简单地不使用 return 关键字 例如 function noReturn function useReturn return console log noReturn undefine
  • 在CKEditor中,如何向按钮添加“文本”标签?

    editor ui addButton ImageUpload label Upload Image command popup image uploader icon this path images icon png 这就是我现在的代码
  • Javascript增加最大数组大小[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个大小的数组2 32 4294967296 因为我试图通过运行筛算法来获取 2 32 之前的所有素数 但是 该数组中的任何操作都会出现以下错误 致命错误 CALL AND RETRY LAST 分

随机推荐

  • 对三元运算符语句中的“意外 T_ECHO”进行故障排除

    DAO gt get num rows 1 echo is echo are 这似乎没有按预期为我工作 我收到错误 Unexpected T ECHO 我希望它能回应 是 或 是 我已经尝试过 条件周围没有括号 我是否无法以这种方式使用三元
  • 如何更改Vuforia AR相机对焦模式?

    我在用Vuforia 6 2 AR SDK对于在Unity中 但是当我在 Android 手机中测试该应用程序时 相机看起来像blurry 我在 Vuforia 的开发者网站中搜索并找到了一些相机对焦模式 但我无法实现 因为该指南适用于较旧
  • 何时使用 Hibernate 投影?

    我对 Hibernate 有点困惑预测 and criteria 何时使用预测以及何时使用标准 它们并不相互排斥 您可以同时使用两者 预测通常在某些标准的背景下使用 简而言之 Hibernate Projections 用于仅查询您使用 C
  • 无法在 Python 中分配 1.6 GB

    这段代码产生一个MemoryError from pylab import complex128 import numpy x numpy empty 100000000 dtype complex128 100 millions comp
  • 在 os.startfile() 中运行时隐藏控制台?

    我有一个 bat带有参数的文件 我使用运行它os startfile test bat 有没有办法隐藏其控制台 我尝试使用subprocess 效果很好 但是当我关闭父程序时subprocess这是使用编译的py2exe控制台模式也关闭 i
  • TinyMCE有效元素:只允许特定的CSS规则

    小MCE的valid elements属性允许您定义有效 HTML 元素及其属性的白名单 您可以仅允许段落和链接 tinyMCE init valid elements p a href 但是 那style属性有点问题 它对于某些事情 例如
  • SSRS堆叠条形图标签位置

    我正在使用 SQL Server 2012 SSRS 我有一个堆积的条形图 其中包括利息和股息 我想将这些值的总和添加到堆积条形图上方的区域 我尝试过调整标签的各种属性 但我无法将标签位置设置在堆叠条形图中间以外的任何位置 有什么想法如何让
  • 使用 PowerShell 将 Azure 活动日志连接到 Log Analytics 实例

    有没有办法使用 PowerShell 将 Azure 活动日志配置为转发到 Log Analytics 实例 本质上与使用本页概述的门户执行的操作相同 https learn microsoft com en us azure azure
  • 当使用 mkstemp() 创建的文件被删除时?

    我有一个程序调用 mkstemp 用返回的 fd 写入一些内容 然后关闭 fd 我希望保留该文件 直到我自己删除它 使用 rm 命令或其他命令 我的问题是 Linux会在close fd 后删除这个文件吗 Linux在close fd 后会
  • 返回对象的 ECMAScript 6 箭头函数

    当从箭头函数返回一个对象时 似乎有必要使用一组额外的 and a return关键字 因为语法中存在歧义 这意味着我不能写p gt foo bar 但必须写p gt return foo bar 如果箭头函数返回对象以外的任何内容 and
  • jquery 1.9 手风琴高度问题

    我正在使用一个手风琴 其父级高度为 400px 我希望手风琴的高度永远不会大于 400px 但我也希望手风琴的各个元素能够根据其内容的大小进行调整 通过将 heightStyle 设置为 fill 我可以使整个手风琴的高度为 400px 在
  • 模块化编译时数组扩展

    假设我处于这种情况 main c include
  • Rails 3:如何验证 A < B,其中 A 和 B 都是模型属性?

    我想验证一下customer price gt my price 我尝试了以下方法 class Product lt ActiveRecord Base attr accessor my price validates numericali
  • C 结构和 Java 类有什么区别?

    我是 Java 的新手 但对 C 有点熟悉 我想知道 C 结构和 Java 对象以及调用它们的方法之间有什么区别 或者完全等价 例如 自行车结构 class BicycleDemo public static void main Strin
  • 如何在shell中为for循环添加前导零? [复制]

    这个问题在这里已经有答案了 我有一个基本的 for 循环数字 它在每次迭代中将变量 num 加 1 for num 1 num lt 5 num do echo num done 哪个输出 1 2 3 4 5 我试图让它产生输出 在 num
  • C++ 动态返回类型

    我不确定这是否是一件事 说实话我想说不是 但我想知道是否有一种方法可以编写 c 函数 以便它可以选择返回哪种类型的对象 例如 我有一个基类 A 有 3 个子类 Aa Ab Ac 在工厂 F 类我有一个std map
  • 为什么“int”和“sbyte”GetHashCode 函数生成不同的值?

    我们有以下代码 int i 1 Console WriteLine i GetHashCode outputs gt 1 这是有道理的 并且 C 中除 sbyte 和 Short 之外的所有整型类型都会发生同样的情况 那是 sbyte i
  • 如何以编程方式检测浏览器如何处理 window.close()?

    不同的网络浏览器以不同的方式处理 window close 函数 IE 会提示用户进行确认 而 Firefox 和 Safari 则无法接受它 除非窗口最初是用 Javascript 打开的 并在控制台中显示一条消息说明同样的内容 我支持的
  • powershell批处理管道

    以下行在 powershell 2 0 中运行良好 servermanagercmd exe query Select String Application Server Context 0 13 但是当我将它合并到我的批处理文件中时 它只
  • 如何在可能是简单字符串或字符串对象的字符串对象上安全地使用 JSON.parse?

    我需要能够解析对象格式或纯字符串格式的字符串 最安全的方法是什么 我尝试了 JSON parse data 但如果数据是纯字符串 它就不起作用 编辑 所选的解决方案 谢谢你 这就是我解决问题的方法 try dataObj JSON pars