getPathValue() 函数用于具有数组和打包 JSON 的深层对象

2023-12-28

有关背景,请参考这个问题:访问嵌入式 JSON 的深层对象成员 https://stackoverflow.com/q/53819904/3566998

那里提供的解决方案与键值中包含的打包 JSON 配合得很好。

但是,它们不处理 JSON 具有数组的情况。

我在另一个问题中引用的原始函数确实处理数组,但它不会处理打包的 JSON。

这是原来的函数:

function getPathValue(obj, path) {
    return new Function('_', 'return _.' + path)(obj);
}

这是第一个问题的答案:

function getValue(object, path) {
    return path
        .split('.')
        .reduce((o, k) => (typeof o === 'string' ? JSON.parse(o) : o)[k], 
object);
}

同样,两者都运行良好,但都没有提供完整的包。

我需要一个能够同时完成这两个任务的解决方案,并且它必须在 IE11 的 ES5 中工作。

以下是 API 返回的 JSON 字符串示例:

{"id":"0001","type":"donut","name":"Cake","ppu":0.55,"batters":{"batter":[{"id":"1001","type":"Regular"},{"id":"1002","type":"Chocolate"}]},"data":"{\"domain\":\"cooking.com\",\"id\":53819390}"}

我希望能够使用路径字符串查询值,例如:

value = getPathValue(obj, 'batters.batter[2].id');

or

value = getPathValue(obj, 'type');

or

value = getPathValue(obj, 'data.domain');

您可以替换括号并将剩余的值作为键。在归约内部,您可以对未给定的对象使用默认对象。

function getValue(object, path) {
    return path
        .replace(/\[/g, '.')
        .replace(/\]/g, '')
        .split('.')
        .reduce(function (o, k) {
            return (typeof o === 'string' ? JSON.parse(o) : (o || {}))[k];
        }, object);
}
var object = {"id":"0001","type":"donut","name":"Cake","ppu":0.55,"batters":{"batter":[{"id":"1001","type":"Regular"},{"id":"1002","type":"Chocolate"}]},"data":"{\"domain\":\"cooking.com\",\"id\":53819390}"},
    path = 'batters.batter[1].id';

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

getPathValue() 函数用于具有数组和打包 JSON 的深层对象 的相关文章

  • 我无法注入带有“!important”规则的样式[重复]

    这个问题在这里已经有答案了 我尝试使用以下代码注入样式 document body style color green important Per CSS 级联引用 http www w3 org TR CSS2 cascade html
  • jQuery - 将所有展开的文本包装在 p 标签中

    我遇到以下情况 以下代码被写入我的页面 div Some text here which is not wrapped in tags p Some more text which is fine p p Blah blah another
  • 使用javascript在谷歌地图中绘制多边形

    我想在谷歌地图中绘制多边形 我正在使用示例代码http jsfiddle net rvsMH 1 http jsfiddle net rvsMH 1 但它不起作用并且没有获取数组或纬度 经度值 我不知道出了什么问题
  • jqgrid 在编辑框中选择不正确的下拉选项值

    我正在使用表单编辑 表单中有两个选择框 一个选择框是国家 地区 另一个选择框是州 州选择框取决于所选的国家 地区 并将动态填充 例如 Country 美国 期权价值 1 英国 期权价值 2 美国的状态 阿拉巴马州 选项值 1 加利福尼亚州
  • 需要禁用引导时间选择器的输入

    我正在使用 Bootstrap 时间选择器 我已经成功实施了 但我需要的是用户只能在 30 分钟间隙内插入 例如 10 00 10 30 11 00 等 为此我尝试过的是minuteStep如下图所示 效果完美 fantasyleague
  • 单击量角器中元素的给定坐标

    我想点击我的特定位置canvas元素 所以我编写了以下量角器代码 var canvas element by id canvas var clickCanvas function toRight toBottom browser actio
  • 通过 AJAX 发送 XML

    我在 jQuery 中创建了一个 xml 文档 如下所示 var xmlDocument
  • Angular - Safari 无法正确显示 DOM

    我是 Angular 的新手 使用 Angular 4 我尝试通过在关联的组件类文件中设置属性来更新特定元素 但是 除非我尝试强制重新绘制网页 通过调整窗口大小等 否则页面不会更新 我打开检查器 看到 DOM 已更改 但显示与元素检查器中的
  • 使用 jQuery 的 javascript 关联数组长度

    我正在使用 javascript 关联数组 例如 var testarray testarray one 1 testarray two 2 testarray three 3 我也在旁边使用jquery 如何使用 jquery 或任何其他
  • 如何使用 jQuery UI Sortable 正确相交?

    这是我对 jQuery UI Sortable 进行动画处理的尝试 https codepen io anon pen YdMOXE https codepen io anon pen YdMOXE var startIndex chang
  • 测量填写部分的时间 - 谷歌表单

    我正在尝试使用谷歌表单进行研究调查问卷 对于某些部分 我想自动测量用户填写所需的时间 谷歌表单中没有这样的选项 我尝试复制表单源 并用 javascript 填充时间 但它不起作用 跨源问题 未能成功托管复制的表单 如何做到 我如何衡量回答
  • 是否可以让 webpacks System.import 使用 ajax (用于进度事件)?

    所以我刚刚更新到 webpack 2 并进行了第一个工作设置 其中 webpack 通过查看 System import 调用自动创建块 相当甜蜜 但是 我使用 ajax 调用加载初始块 以便我可以加载时显示进度 https stackov
  • 替换打字稿中字符串中字符的所有实例?

    我正在尝试用 x 字符替换电子邮件中的所有句号 例如 电子邮件受保护 cdn cgi l email protection 将变为 myxemail emailxcom 电子邮件设置为字符串 我的问题是它不只是替换句号 而是替换每个字符 所
  • backbone.js:视图中影响集合中不同模型的按钮

    我刚刚开始使用backbone js 到目前为止 我真的很喜欢它 我有这样的事情 ModelA ModelB ViewA ViewB ModelA 持有 ModelB 的集合 如何使用按钮构建模型 B 的视图 单击该按钮会更改集合中下一个
  • 如何修复带有单个道具的括号的 prettier 和 tslint 错误?

    我使用 prettier 和 tslint https github com alexjoverm tslint config prettier https github com alexjoverm tslint config prett
  • 使用 Javascript 检测 Pepper (PPAPI) Flash

    我们使用的是专有的文档查看器 它与某些 Chrome 版本中的 Pepper 版本的 Flash 配合得不太好 所以我希望能够检测到它并重定向到不同格式的相同内容 由于这个版本似乎落后于 NPAPI 版本 所以我一直在使用闪光检测 http
  • 在 React JSX 中返回配对元素

    问题 在 React 中 您希望通过映射数组来创建 DOM 结构 但数组中的每个项目应返回 2 个元素 例如 import React from react import from lodash let Component React ex
  • 通过ajax执行后期操作时如何克服CORS重定向问题?

    我可以通过外部登录表单中的 post 方法类型提交表单来登录 roundcube 实例 托管在另一台服务器上 我收到此错误 通过 ajax 签名时 XMLHttpRequest 无法加载https 192 168 0 7 mail http
  • 右列固定的 Div 表

    我最近接手了一个非营利网站作为一个项目 我正在使用一个现有的网站 所以我必须使用很多已经编程的东西 所以我所要做的就是创建设计 I made a diagram of basically what I can t figure out ho
  • 将 javascript 变量作为参数传递给 @url.Action()

    是否可以将javascript变量作为参数传递给 url Action 因为据我所知可能存在服务器和客户端问题 我的要求是我必须根据过滤器下载文件 并进行ajax调用不适用于下载文件 所以我对 url Action 进行了编码 但无法实现这

随机推荐

  • Cassandra 或 MongoDB 用于我们基于位置的应用程序

    我们正在考虑在一个大型项目中使用 NoSQL 数据库系统 目前 我们已经阅读了一些有关 MongoDB 和 Cassandra 的内容 尽管我们对这两者都没有任何经验 我们非常精通 MySQL 和 Microsoft SQL 等传统关系数据
  • 将 ajax 与 Spring MVC 结合使用

    我目前正在使用 Spring MVC 并且我正在尝试使用 ajax 做一些事情 基本上我现在想做的就是在网页上动态显示控制器的结果 IE 用户按下按钮 它会转到 whatever do 控制器并获取列表并显示该列表 而无需重新加载该页面 无
  • 如何告诉 WCF 跳过证书验证?

    试图做一个网络服务 http en wikipedia org wiki Web service打电话给HTTPS http en wikipedia org wiki HTTP Secure端点在我的银光 http en wikipedi
  • 如何使用Python进行互联网搜索?

    我想编写一个程序来搜索一个相当大的网站并提取某些内容 我上过一些在线 Python 课程 但都没有提到如何使用 Python 访问互联网 我不知道应该从哪里开始 你必须首先阅读标准Python库urllib2 http docs pytho
  • 与 docker swarm 的粘性会话

    我有一个使用 socket io 的 dockerized node js 应用程序 通过 docker compose 我在同一服务器上的两个不同容器上运行该应用程序的 2 个副本 然而 到达服务器的请求是以循环方式分发的 有没有一种方法
  • 将逗号分隔的列数据拆分为附加列

    我在一列中有逗号分隔的数据 Column a b c d 我想将逗号分隔的数据拆分为多列以获得以下输出 Column1 Column2 Column3 Column4 a b c d 如何才能实现这一目标 split part https
  • 查找数组中没有特定值的第一个值

    我怀疑这个问题很简单 但仍然是 我正在寻找一种有效的方法来从没有特定值的数组中获取第一个元素 例如 给定 Fred Fred Fred James Alex Fred 我想归还 詹姆斯 我可以通过类似的方式做到这一点 thearray se
  • Windows 中的 Confluence 平台

    是否可以在 Windows 上运行完整的 Confluence 平台 如果不是 运行 Confluence 平台的最佳方式是什么 Thanks Per 支持的操作系统列表 https docs confluent io current in
  • 如何在 REST 中创建 POST 请求以接受 JSON 输入?

    我正在尝试学习 RESTful Web 服务 我正在创建一组简单的网络服务 当我开始处理 POST 时遇到了困难 我想将 JSON 输入传递给 POST 方法 这就是我在代码中所做的 RequestMapping value create
  • 如何使用 VSCode 在虚拟环境中调试 python 代码?

    EDIT 使用 VSCode 我在虚拟环境中调试时遇到了问题 该环境具有未安装在base环境 使用命令激活环境后activate my env 我可以使用通常的 python 命令在环境中使用这些包python main py 但是在调试时
  • 2 个 cgi 脚本中的会话登录和注销

    我需要在用户登录时存储登录会话 并在用户退出系统或会话超时时删除登录会话 我正在用 Perl 编码 我知道我可以在 Perl 中使用 CGI Session 模块 但是如何确保会话是由 1 个 cgi 脚本创建并由另一个 cgi 脚本删除的
  • 如何通过 Qt WebGL 流向多个用户提供 Qt 应用程序?

    Qt Quick WebGL 流媒体 https www qt io blog 2018 11 23 qt quick webgl release 512是一种技术 任何 Qt Quick QML 应用程序都可以向通过 Web 浏览器连接的
  • 如何在 MongoDB 中启用数据压缩

    在 MongoDB 中 WiredTiger 提供了 Zlib 压缩选项 为了启用 Zlib 压缩选项 我使用以下代码创建了一个集合 db createCollection questions storageEngine wiredTige
  • 错误:WebhookClient.handleRequest 上没有请求意图的处理程序

    调用云函数的默认意图会出现错误 Error No handler for requested intent at WebhookClient handleRequest user code node modules dialogflow f
  • Powershell Get-ChildItem 进度问题

    所以 我在一个文件夹中有一组目录 00 99 每个目录都有 100 个子目录 00 99 每个子目录都有数千张图像 我想做的基本上是在计算平均文件大小时获得进度报告 但我无法让它发挥作用 这是我当前的查询 get childitem
  • 有没有办法更新工作项的“部署”部分?

    有谁知道更新工作项的 部署 部分的方法 我还没有找到任何可以执行此操作的任务的工作示例 cli 命令或 API 调用 这似乎是Azure DevOps Releases产品的独有功能 但我希望能够使用多阶段 YAML 管道来实现类似的东西
  • 在 Python 中定义带有可选参数的类

    class class1 def setdata self value1 value2 self data value1 value2 def display self print self data 对于上面的代码 当我使用它的时候 它需
  • C# - SqlDataReader 和序列化

    SqlDataReader 可以传递到会话或发送到客户端吗 例如 如果我从数据库中检索了一些行 并希望将此数据发送到另一台客户端计算机 我可以简单地通过在服务器上使用 json 序列化它然后在客户端上反序列化来完成此操作吗 不 只有数据 没
  • 在没有 epmd 的情况下启动 erlang VM

    我正在尝试与 erlang 虚拟机分开启动 epmd 以便对连接处理进行监控 这工作得很好 除了虚拟机在 epmd 之前启动的情况 有没有办法让 erlang 虚拟机启动而不自行启动 epmd 从 Erlang OTP 19 0 开始 有a
  • getPathValue() 函数用于具有数组和打包 JSON 的深层对象

    有关背景 请参考这个问题 访问嵌入式 JSON 的深层对象成员 https stackoverflow com q 53819904 3566998 那里提供的解决方案与键值中包含的打包 JSON 配合得很好 但是 它们不处理 JSON 具