javascript 中如何知道一个对象是否是 JSON? [复制]

2023-12-23

我如何知道变量是 JSON 还是其他变量?是否有 JQuery 函数或者我可以用来解决这个问题的东西?


根据您的评论,听起来您不想知道字符串是否是有效的 JSON,而是想知道对象是否可以成功编码为 JSON(例如,不包含任何 Date 对象、用户定义类的实例、 ETC。)。

这里有两种方法:尝试分析对象及其“子对象”(注意递归对象)或“吸一吸”。如果您手头有一个 JSON 编码器(JSON.stringify在最近的浏览器或插件中,例如jquery-json http://code.google.com/p/jquery-json/),后者可能是更简单、更稳健的方法:

function canJSON(value) {
    try {
        JSON.stringify(value);
        return true;
    } catch (ex) {
        return false;
    }
}

直接分析对象要求您能够判断它是否是“普通”对象(即使用对象字面量创建或new Object()),这又要求您能够获得其原型,这并不总是那么简单。我发现以下代码可以在 IE7、FF3、Opera 10、Safari 4 和 Chrome 中运行(很可能还有这些浏览器的其他版本,我只是没有测试过)。

var getPrototypeOf;

if (Object.getPrototypeOf) {
    getPrototypeOf = Object.getPrototypeOf;
} else if (typeof ({}).__proto__ === "object") {
    getPrototypeOf = function(object) {
        return object.__proto__;
    }
} else {
    getPrototypeOf = function(object) {
        var constructor = object.constructor;

        if (Object.prototype.hasOwnProperty.call(object, "constructor")) {
            var oldConstructor = constructor;    // save modified value

            if (!(delete object.constructor)) {  // attempt to "unmask" real constructor
                return null;                     // no mask
            }

            constructor = object.constructor;    // obtain reference to real constructor
            object.constructor = oldConstructor; // restore modified value
        }

        return constructor ? constructor.prototype : null;
    }
}

// jQuery.isPlainObject() returns false in IE for (new Object())
function isPlainObject(value) {
    if (typeof value !== "object" || value === null) {
        return false;
    }

    var proto = getPrototypeOf(value);

    // the prototype of simple objects is an object whose prototype is null
    return proto !== null && getPrototypeOf(proto) === null;
}

var serializablePrimitives = { "boolean" : true, "number" : true, "string" : true }

function isSerializable(value) {
    if (serializablePrimitives[typeof value] || value === null) {
        return true;
    }

    if (value instanceof Array) {
        var length = value.length;

        for (var i = 0; i < length; i++) {
            if (!isSerializable(value[i])) {
                return false;
            }
        }

        return true;
    }

    if (isPlainObject(value)) {
        for (var key in value) {
            if (!isSerializable(value[key])) {
                return false;
            }
        }

        return true;
    }

    return false;
}

所以是的……我推荐 try/catch 方法。 ;-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript 中如何知道一个对象是否是 JSON? [复制] 的相关文章

  • 外部 CSS 是否应用于 jsPDF 生成的 pdf

    我已经开始使用 jspdf 制作一些演示 我有一个 html 文件 我的 css 在外部文件中 我写了下面的代码来生成我的pdf pdfButton on click function var pdf new jsPDF p in lett
  • 为什么Google的闭包库不使用真正的私有成员?

    我成为 JavaScript 开发人员已经有一段时间了 我一直认为在 JavaScript 中实现私有成员的正确方法是使用 Doug Crockford 在这里概述的技术 http javascript crockford com priv
  • MongoDB:尝试从 JSON 读取 Long 导致 java.lang.Integer 无法转换为 java.lang.Long

    我有一个代码可以从 MongoDB 读取特定格式的数据 我需要测试一下 为此 我使用要测试的数据创建一个 JSON id ObjectId 57552e32e4b0839ede67e0af serial 574000690 startDat
  • JSON 对象数组转 Java POJO

    将此 JSON 对象转换为 java 中的类 您的 POJO 类中的映射将如何 ownerName Robert pets name Kitty name Rex name Jake This kind of question is ver
  • Karma + JSPM + Typescript - 未找到“.ts.js”

    主要只是想让 Karma JSPM 在加载 ts 文件时发挥良好作用 但绝对没有运气 我看到一个讨论库 https github com Larchy karma jspm typescript coverage tree master一个
  • 在 Angular JS 中撤消重做

    我有一个大对象排列在 rootScope 中 比如说 gt 100 个对象 每个对象又具有对象 数组的层次结构 我想使用 deepWatching watch 整个 rootScope 即将 watch 的第三个参数设置为 TRUE 但这里
  • 从画布保存/转换后文件质量下降的问题

    这是我正在使用的代码 代码位于这篇文章的底部 但这里是链接GitHubGist Noitidart ff addon snippet browseForBadgeThenCreateSaveAnApply js https gist git
  • 我可以阻止history.popstate在初始页面加载时触发吗?

    我正在开发一个通过 AJAX 提供内容的网站 如果您单击菜单中的某个项目 内容 div 会更新为 get回应 没什么花哨的 我正在实施history pushState允许使用浏览器的后退 前进按钮进行导航 我有以下内容可以在历史导航上加载
  • 名称属性的 CSS 选择器?

    这可能是一个愚蠢的问题 但是属性的 CSS 选择器是什么 a 那是 名字 document body innerHTML myString anchor HTML String 这段 JavaScript 创建了一个 a 带有名称的元素 H
  • 如何在jsp中使用javascript动态创建下拉框?

    我正在尝试动态创建下拉框 就像当我单击添加按钮时它必须创建新的下拉框 下拉列表还包含动态值 例如需要当前年份并且必须显示最多五年 请建议我这样做 谢谢 这是我尝试过的代码 JavaScript 代码 function Add var nam
  • 从变量值动态设置 ng-controller

    我正在使用 AngularJs 和 NodeJS 开发一个应用程序 我对将控制器的名称设置为主控制器中的变量的值感到震惊 为了更好地解释它 我的 index html 看起来像这样 tbody tr td td td member task
  • 删除数组中所有对象的属性

    我想删除bad数组中每个对象的属性 有没有比使用更好的方法for循环并从每个对象中删除它 var array bad something good something bad something good something for var
  • Angular2,测试和解析数据:如何测试 ngOnInit?

    我正在通过Angular2 测试指南 https angular io docs ts latest guide testing html并希望编写一个测试ngOnInit 功能 那个来自编程指南的路由部分 https angular io
  • 新部署后,React 应用程序必须清除浏览器缓存

    我们正在使用 Jenkins 管道在 apache 服务器上部署 React 应用程序 当我们部署新代码时 大多数新功能都可以正常工作 但并非所有更改都反映浏览器中的最新内容 用户必须打开隐身窗口或清除缓存才能看到新功能 我见过一些相关的解
  • 特别更改画布上的笔画不透明度,但不更改颜色

    我有一个漂亮整洁的脚本 可以循环显示颜色 并且与 xxxxxx格式 但我想改变透明度 有没有办法做到这一点 我指的是ctx strokeStyle 这是当前的代码 canvas strokeStyle 16777215 s length i
  • 在Vue.js 3中添加全局变量

    如何在 Vue js 3 中添加全局变量 在 Vue js 2 中 我们在main js file Vue prototype myGlobalVariable globalVariable 最直接的替换就是app config globa
  • Electron 应用程序中的 NEDB 持久化

    我正在尝试从电子应用程序连接到 nedb CRUD 操作效果很好 但我没有看到 db 文件 D my db 检查隐藏文件 文件存在于某个地方 因为即使在机器重新启动后它也会保留数据 我怀疑电子威胁着我的相对路径 但我可以在任何地方找到它 v
  • 如何优化 Three.js 中多个 sphereGeometry 的渲染?

    我想优化 Three js 中 sphereGeometry 的渲染 因为它成为我的程序的瓶颈 javascript程序如下所示 var sphereThree for var idSphere 0 idSphere lt numSpher
  • 将base64图像转换为Node Js中的文件

    我是 Node Js 新手 我需要包含用户的个人资料图片 我从 IOS 应用程序收到 Base64 图像的请求 我需要将其存储在 images 文件夹中并将图像路径保存在 mongodb 数据库中 我使用了以下代码 var bitmap n
  • React 嵌入脚本标签不可样式化

    我打算将 SurveyMonkey 调查嵌入到我的网站中 用 React 制作 只是让它工作起来很麻烦 但最终这段代码工作了 let script let extractScript

随机推荐

  • 使用计时器显示文本 3 秒?

    是否可以使用计时器在标签中显示文本 3 秒左右 F E 当您保存某些内容并且成功时 您会收到一条短信 成功 3秒后返回原页面 有人知道如何使用标签或消息框来做到这一点吗 是的 有可能 您可以在将标签文本设置为 成功 的位置启动计时器 并将其
  • elasticsearch 5.5突出显示字段不起作用

    我测试了弹性搜索突出显示字段功能 它工作正常 我用了弹性搜索2 4 4 and spring data elasticsearch 2 0 0 RELEASE 示例代码在下面的帖子中 如何使用 Spring data elasticsear
  • 如果该集合不可在进程之间整除,则使用 MPI_Scatter

    我有一个使用 MPI Scatter 和 MPI Gather 的程序 该程序将整数 N 作为输入 并返回从 2 到 N 的质数 我创建一个包含从 2 到 N 的数字的数组 并使用 MPI Scatter 将数组拆分为 N procs 数量
  • GCC 转储预处理器定义

    gcc g 有没有办法从命令行转储其默认预处理器定义 我的意思是像 GNUC STDC 等等 是的 使用 E dM选项而不是 c 示例 将它们输出到标准输出 echo gcc dM E echo clang dM E For C echo
  • Microsoft 整数文字扩展 - 在哪里记录?

    我在 Windows 安装的标准 stdint h 头文件中遇到了一些整数文字 文字具有以下形式的后缀 i8 ui8 i16 ui16 i32 ui32 i64 ui64 我以前遇到过 i64 形式的后缀 但从未遇到过任何其他形式的后缀 我
  • 尝试改进 Encode::decode 警告消息:$SIG{__WARN__} 处理程序中的段错误

    我正在尝试改进发出的警告消息Encode decode https metacpan org pod Encode FB WARN 我希望它打印正在读取的文件的名称以及在该文件中找到格式错误的数据的行号 而不是打印模块的名称和模块中的行号
  • Oracle STANDARD_HASH 在 PLSQL 中不可用?

    我正在尝试在 PL SQL 中使用 STANDARD HASH Oracle 12c 函数 但似乎不可用 SQL gt exec dbms output put line STANDARD HASH test BEGIN dbms outp
  • 一个数据流作业内的并行管道

    我想在 GCP 上的一个数据流作业中运行两个并行管道 我已经创建了一个管道 它工作得很好 但我想要另一个管道而不创建另一份工作 我已经搜索了很多答案 但找不到任何代码示例 如果我这样运行它就不起作用 pipe1 run pipe2 run
  • 在 python 中使用组合来处理非常大的序列

    我正在尝试确定 87 个不同字符串的所有组合 这些组合可以组成 29 个元素的序列 我在 python 中使用组合来执行此操作 如果序列只有 4 个元素长 但它无法处理 29 个元素 则效果很好 这是我正在使用的代码 combos iter
  • 如果背景不透明,ListViewItem 不会突出显示

    我有一个带有自定义渐变背景的 ListViewItem 默认选择器不再突出显示这些行 仅当我将背景设置为透明时 突出显示才有效 如果没有这种改变 我怎样才能获得亮点 这是我的列表视图
  • Git:准备好真正的合并提交后,如何创建一个简单的提交?

    调用后git merge no commit
  • 保持远程桌面会话“活动”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 AutoIt 来自动化 GUI 操作 使用 RDP 连接到运行要自动化的应用程序的计算机 每当我最小化 RDP 窗口 使用 m
  • 监控进程对每个CPU核心的使用情况

    有没有办法查询或计算CPU使用率单一进程 per 每个核心分别地 例如 名称 核心1 核心2 核心3 核心4火狐 exe 0 5 0 1 0 2 0 3 我知道一个名为 Process Explorer 由 Mark Russinovich
  • Excel VBA 日期之间的计数

    我需要创建一个函数来计算两个日期之间帐号的出现次数 第一个日期基于函数输入 第二个日期提前 3 个月 日期可能不包含在数据集中 该范围内的日期值的格式为 dd mm yyyy h mm 由于数据集的大小约为 150 000 行 我想在代码中
  • 从路径文件列表中列出Python中的目录树结构

    该问题旨在扩大 stackoverflow 上已通过主题 回答的问题的范围 python 中列出目录树结构 https stackoverflow com a 59109706 目标是形成一个直观地表示目录树的字符串列表 有分支机构 但输入
  • Scala 示例 - 具有上下文边界错误的特征类型参数?

    阅读 Scala by Example 一书 Martin 在第 54 页解释类型界限时有一个示例 trait Set A lt Ordered A def incl x A Set A def contains x A Boolean a
  • AngularJS 速溶咖啡资产控制器未找到

    在我的 AngularJS node js 中app https github com zishe angular express coffee基于角度表达博客 https github com btford angular express
  • 在弹性beanstalk部署的ec2微实例上创建交换文件/驱动器

    因此 只要我将应用程序放在比微型更大的实例上 它就可以很好地安装和部署 当我在 micro 上部署时 当作曲家尝试安装时 我收到一个有关无法分配足够内存的 php 错误 所以我做了一些谷歌搜索 似乎你可以在启动时创建交换文件 磁盘 创建实例
  • Shopware 6 在自定义主题中使用 fontawesome

    我需要在我的自定义主题中使用 fontawesome 因此我使用yarn安装了它yarn add fortawesome fontawesome free 当我尝试导入它时 import fortawesome 在我的主题的 base sc
  • javascript 中如何知道一个对象是否是 JSON? [复制]

    这个问题在这里已经有答案了 我如何知道变量是 JSON 还是其他变量 是否有 JQuery 函数或者我可以用来解决这个问题的东西 根据您的评论 听起来您不想知道字符串是否是有效的 JSON 而是想知道对象是否可以成功编码为 JSON 例如