Javascript 处理 JSON 数据 示例

最近做了一个 MEAN stack 的 app 。后台用 NodeJS 从 Jira rest api 获得JSON数据并做处理,然后前端用 AngularJS Ajax call 获得处理后的 JSON 数据,显示到 App 上。处理了很多 JSON 数据,决定编一个例子,写一个总结。


JSON 数据处理,基本就是 JSON String 和 JSON Object 之间的转换。

JSON String 转换成 JSON Object 用 JSON.parse 方法。反之,用 JSON. Stringify 方法。


以下的简单例子中, NodeJS 获取到用户订单信息(JSON String),对信息进行处理,在希望显示在前端的数据中 “show" field 设置为 true,反之设置为 false。然后前端从后端得到数据,将需要显示的数据,输出到 console 中。CodePen 示例链接

1. 后台从其他服务器获得数据并处理:

// 后台 NodeJs 从其他网站 restAPI 得到如下 JSON String 包含了用户一次订单的信息。 用户名,价格,产品信息等。
var cart_json = '{"username":"christy@gmail.com","city":"Vienna","state":"Virginia","country":"USA","products":[{"name":"PlayStation4","category":"PlayStation","price":"$399.99","quantity":1},{"name":"HD Sound Bar with Wireless Subwoofer","category":"Sound Bar","price":"$899.99","quantity":2},{"name":"POV HD Camcorder","category":"Action Cam","price":"$249.99","quantity":1}],"shipping":"$10.00","total":"$2449.96"}';
// 将 JSON String 转化成 JSON object
var cart_obj = JSON.parse( cart_json );
// 获得 products object
var products_obj = cart_obj.products;
// 声明新的 array
var products_arr = [];
// 遍历 products object, 每个 field 添加相应的 field “show” 构成新的 object。 如果想展示此 field, show 值设为 true, 反之为 false。
for(var i = 0; i < Object.keys( products_obj ).length; i ++){product_name_obj = { name : products_obj[i].name, show : true };product_category_obj = { category : products_obj[i].category, show : true };product_price_obj = { price : products_obj[i].price, show : false };product_quantity_obj = { quantity : products_obj[i].quantity, show : false };//将新的 object 合到一起构成添加到新的 array 中products_arr[i] = { "product": [product_name_obj, product_category_obj, product_price_obj, product_quantity_obj] };}
// 新 array 中存放的是新的 JSON object
var products_obj_new = products_arr;
// 将 JSON object 转换成 JSON String 
var products_str_new = JSON.stringify( products_obj_new );
// 在 console 中输出 JSON object 和 JSON String 供查看
console.log('JSON object:');
console.log( products_obj_new );
console.log('JSON String:');
console.log( products_str_new );
console 截图如下:



2.前端从后台获得数据处理并显示:

// 前端 javascript 通过 Ajax call 得到 NodeJS 生成的 JSON String
var products_str_get = products_str_new;
// 将 JSON String 转换成 JSON object
var products_obj_get = JSON.parse( products_str_get );
// 输出允许输出的 product 信息
// 遍历 products
for( var i = 0; i < Object.keys( products_obj_get ).length; i++ ){var product_obj = products_obj_get[i].product;console.log( "product " + i );//遍历每一个 product 中的 key value pairfor ( var j = 0; j < Object.keys( product_obj ).length; j++ ){// 如果 show field 值为 true 则显示相应产品信息if( product_obj[j].show ){var key = Object.keys( product_obj[j] )[0];var value = product_obj[j][key];console.log( key + ":" + value );}}}

console 截图如下:






本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ansible常用命令

一、ansible常用命令 一、ansible命令的常用参数 ansible 默认提供了很多模块来供我们使用。在 Linux 中&#xff0c;我们可以通过 ansible-doc -l 命令查看到当前 ansible 都支持哪些模块&#xff0c;通过 ansible-doc -s 模块名 又可以查看该模块有哪些参数可以使用。 1、…

2018.08.16 洛谷P2029 跳舞(线性dp)

传送门 简单的线性dpdp。 直接推一推就行了。 貌似三个状态会卡空间啊。。。 笔者分了两个阶段考虑状态转移。 代码&#xff1a; #include<bits/stdc.h> #define N 5001 #define inf 0x3f3f3f3f using namespace std; char xxx; int n,t,f[N][N],s[N],b[N],ans0; ch…

第一个 Rails App 从安装到创建(windows版本)

1. 在以下网址下载并运行 Rails 安装包&#xff1a; 点击打开链接 2. 检查 ruby&#xff0c;sqlite 和 rails 是否安装成功 2.1 查看 ruby 版本&#xff0c; 在命令行中输入&#xff1a; ruby -v 运行截图如下&#xff1a; 2.2 查看 sqlite 版本&#xff0c;在命令行中输入&…

Ruby Variable Scope 简单讲解

Name Begins WithVariable Scope$A global variableAn instance variable[a-z] or _A local variable[A-Z]A constantA class variable 以一个简单例子示例各种变量的区别&#xff1a;class Female# ConstantSEX female# Class variable: shared among all instances of this …

【Luogu P2781】 传教

这题是可以用线段树做的。虽然$n\leq 10^9$可以发现&#xff0c;真正需要用到的节点很少&#xff0c;故动态开点&#xff0c;只有需要用到的时候才新建节点。这里我在下放标记的时候新建节点&#xff0c;因为每操作/查询一个节点都需要先下放标记。时间复杂度$O(m\log n)$&…

P1481 魔族密码 (LIS)

题的连接&#xff1a;https://www.luogu.org/problemnew/show/P1481 简单思路&#xff1a; 就是LIS&#xff0c;最长上升子序列&#xff0c;当然把条件改一下&#xff0c;从模板里的A[ i ]> A[ j ]变成ss[ i ].find(ss[ j ])0&#xff1b;即可。好好理解最长上升子序列。是不…

Rails Minitest style 指南

In the test, we should use the ‘describe’, ‘context’, ‘it’ structure. Here I use a controller test as an example. I have this my_controller.rb with two controller actions: class MyController < ApplicationControllerdef controller_action_1# Code g…

浅谈离散数学中数理逻辑与集合论的数学本质

申华 , 张胜元 - 《大学教育》 - 2013 离散数学本质上是一门数学课程&#xff0c;是学生数学知识结构和数学素质的重要组成部分。数学这门学科体系虽然很庞大&#xff0c;但大致可分为连续型、离散型和随机型这三大类。在大多数的理工科专业的课程设计中&#xff0c;数学…

Rails用DELETE method提交表单讲解

Sometimes we need to submit form using methods other than ‘post’, in this example, it’s ‘delete’. For example, I wanted to delete a user when a form is submitted with the user name and ‘delete’ method. 1. I created the route like this: delete ‘test…

【PAT】B1055 集体照(25 分)

很简单的two points问题 ##注意&#xff1a;K是行数 #include<stdio.h> #include<string.h> #include<map> #include<vector> #include<algorithm> using namespace std; struct people{char name[10];int height; }arr[10005]; bool cmp(people…

luogu 4768

kruskal 重构树对于一张无向图&#xff0c;我们在进行 kruskal 的过程中每当合并两个联通块时新建虚拟节点 t对于两个联通块的根节点 fau&#xff0c;fav 连无向边(fau, t)&#xff0c;(fav, t) 其中点 t 的点权为两个联通块当前连边的边权对于这道题首先 dijkstra 处理所有点到…

使用DreamHost当GoDaddy域名的服务器 步骤

1. 在GoDaddy管理员页面中改变DNS设置&#xff0c;指向DreamHost Name servers&#xff1a; 进入Domain details page: 目前在 SETTINGS -> Nameservers. 数值还是默认值: NS11.DOMAINCONTROL.COM NS12.DOMAINCONTROL.COM 我们需要将它修改为 DreamHost nameservers: …

PAT乙级1011.A+B和C (15)(15 分)

给定区间[-2^31^, 2^31^]内的3个整数A、B和C&#xff0c;请判断AB是否大于C。 输入格式&#xff1a; 输入第1行给出正整数T(<10)&#xff0c;是测试用例的个数。随后给出T组测试用例&#xff0c;每组占一行&#xff0c;顺序给出A、B和C。整数间以空格分隔。 输出格式&#x…

有用的 Google Analytics Chrome 插件推荐

1.Google Analytics Debugger Debbuger 会列出所有执行的命令以及传过去的参数。 例如&#xff0c;常见的命令有&#xff1a; 初始化 Google Analytics&#xff0c; 传送页面访问 和传送事件。 https://chrome.google.com/webstore/detail/google-analytics-debugger/jnkmf…

项目计划定制:项目计划划分与产品项目推进的有机结合

目录&#xff1a; 第一章&#xff1a;导语第二章&#xff1a;需求采集部分的一些要点第三章&#xff1a;项目中一些需要明确的内容第四章&#xff1a;关于成本管理部分第一章&#xff1a;导语 那么什么叫项目&#xff0c;项目计划和项目管理&#xff1f; 项目管理简称为PM&…

Rails 使用 Google Analytics 示例

1. 创建 _google_analytics.html.erb view: <span style"font-size:18px;"><!-- Google Analytics -->window.gawindow.ga||function(){(ga.qga.q||[]).push(arguments)};ga.lnew Date;// Create tracker.ga(create, <% ENV[GOOGLE_ANALYTICS_TRACKI…

爬虫_微信小程序社区教程(crawlspider)

照着敲了一遍&#xff0c;&#xff0c;&#xff0c; 需要使用"LinkExtrator"和"Rule"&#xff0c;这两个东西决定爬虫的走向。 1.allow设置规则的方法&#xff1a;要能够限制在我们想要的url上&#xff0c;不要跟其他的url产生相同的正则表达式即可 2.什么…

开始使用Google Analytics 示例

1. 创建一个 Google Analytics 账户. 2. 创建新的 property: 在左上角点击 Admin。 然后在 Property 标签下面&#xff0c;点击以展开下拉菜单&#xff1a; 选择"create new property": 3. 填写所有必须填写的框: 建议打开 In-page analysis: What is in-page ana…

数据库连接池优化配置(druid,dbcp,c3p0)

主要描述了数据库连接池参数配置的准则&#xff0c;针对常用的数据库连接池(c3p0,dbcp,druid)给出推荐的配置。 考虑因素 1&#xff1a;当前连接DB的规模 2&#xff1a;并发情况 3&#xff1a;执行db的响应时间 配置考虑 1&#xff1a;初始化连接&#xff1a;可考虑设置为…

Windows系统上3种连接Docker虚拟机的方法

1.Docker Quickstart Terminal 打开 "Docker Quickstart Terminal" 然后输入 $ docker-machine ssh <docker machine name> 此处Docker虚拟机的名字是default&#xff1a; 2. gitBash 打开 "gitBash" &#xff0c;然后输入&#xff1a; $ docker-ma…