JSON 数据解析的方法

JSON 数据解析

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。 

JSON的规则很简单: 对象是一个无序的“‘名称/值'对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值' 对”之间使用“,”(逗号)分隔。具体细节参考http://www.json.org/json-zh.html

举个简单的例子:

js 代码

function showJSON() {
    var user = {
        "username": "andy",
        "age": 20,
        "info": {
            "tel": "123456",
            "cellphone": "98765"
        },
        "address": [{
                "city": "beijing",
                "postcode": "222333"
            }, {
                "city": "newyork",
                "postcode": "555666"
            }
        ]
    }
    alert(user.username);
    alert(user.age);
    alert(user.info.cellphone);
    alert(user.address[0].city);
    alert(user.address[0].postcode);
}

这表示一个user对象,拥有username, age, info, address 等属性。
同样也可以用JSON来简单的修改数据,修改上面的例子,得到:

js 代码

function showJSON() {
    var user = {
        "username": "andy",
        "age": 20,
        "info": {
            "tel": "123456",
            "cellphone": "98765"
        },
        "address": [{
                "city": "beijing",
                "postcode": "222333"
            }, {
                "city": "newyork",
                "postcode": "555666"
            }
        ]
    }
    alert(user.username);
    alert(user.age);
    alert(user.info.cellphone);
    alert(user.address[0].city);
    alert(user.address[0].postcode);
    user.username = "Tom";
    alert(user.username);
}

JSON提供了json.js包,下载http://www.json.org/json.js 后,将其引入然后就可以简单的使用​object.toJSONString()​转换成JSON数据。
 

js 代码

function showCar() {
    var carr = new Car("Dodge", "Coronet R/T", 1968, "yellow");
    alert(carr.toJSONString());
}

function Car(make, model, year, color) {
    this.make = make;
    this.model = model;
    this.year = year;
    this.color = color;
}

可以使用​eval​来转换JSON字符到Object

js 代码

function myEval() { 
    var str = '{ "name": "Violet", "occupation": "character" }'; 
    var obj = eval('(' + str + ')'); 
    alert(obj.toJSONString()); 
}

或者使用​parseJSON()​方法

js 代码

function myEval() {
    var str = '{ "name": "Violet", "occupation": "character" }';
    var obj = str.parseJSON();
    alert(obj.toJSONString());
}

下面使用prototype写一个JSON的ajax例子。
先写一个servlet (我的是servlet.ajax.JSONTest1.java)就写一句话
java 代码

response.getWriter().print("{ \"name\": \"Violet\", \"occupation\": \"character\" }");

再在页面中写一个ajax的请求

js 代码

 

function sendRequest() {

    var url = "/MyWebApp/JSONTest1";

    var mailAjax = new Ajax.Request(

        url, {

        method: 'get',

        onComplete: jsonResponse

    });

}

function jsonResponse(originalRequest) {

    alert(originalRequest.responseText);

    var myobj = originalRequest.responseText.parseJSON();

    alert(myobj.name);

}

prototype-1.5.1.js中提供了JSON的方法,String.evalJSON(), 可以不使用json.js, 修改上面的方法

js 代码

function jsonResponse(originalRequest) {
    alert(originalRequest.responseText);
    var myobj = originalRequest.responseText.evalJSON(true);
    alert(myobj.name);
}

JSON还提供了java的jar包 http://www.json.org/java/index.html API也很简单,下面举个例子
在javascript中填加请求参数

js 代码

function sendRequest() {
    var carr = new Car("Dodge", "Coronet R/T", 1968, "yellow");
    var pars = "car=" + carr.toJSONString();

    var url = "/MyWebApp/JSONTest1";
    var mailAjax = new Ajax.Request(
        url, {
        method: 'get',
        parameters: pars,
        onComplete: jsonResponse
    });
}

使用JSON请求字符串就可以简单的生成JSONObject并进行解析,修改servlet添加JSON的处理(要使用json.jar)
java 代码

 

private void doService(HttpServletRequest request, HttpServletResponse response) throws IOException {

    String s3 = request.getParameter("car");

    try {

        JSONObject jsonObj = new JSONObject(s3);

        System.out.println(jsonObj.getString("model"));

        System.out.println(jsonObj.getInt("year"));

    } catch (JSONException e) {

        e.printStackTrace();

    }

    response.getWriter().print("{ \"name\": \"Violet\", \"occupation\": \"character\" }");

}

同样可以使用JSONObject生成JSON字符串,修改servlet

java 代码

private void doService(HttpServletRequest request, HttpServletResponse response) throws IOException {
    String s3 = request.getParameter("car");
    try {
        JSONObject jsonObj = new JSONObject(s3);
        System.out.println(jsonObj.getString("model"));
        System.out.println(jsonObj.getInt("year"));
    } catch (JSONException e) {
        e.printStackTrace();
    }
    JSONObject resultJSON = new JSONObject();
    try {
        resultJSON.append("name", "Violet")
            .append("occupation", "developer")
            .append("age", new Integer(22));
        System.out.println(resultJSON.toString());
    } catch (JSONException e) {
        e.printStackTrace();
    }
    response.getWriter().print(resultJSON.toString());
}

js 代码

 

function jsonResponse(originalRequest) {

    alert(originalRequest.responseText);

    var myobj = originalRequest.responseText.evalJSON(true);

    alert(myobj.name);

    alert(myobj.age);

}

下面在重点给大家介绍JS中json数据的处理:
1、 json数据结构(对象和数组)
json对象:​var obj = {"name":"xiao","age":12};
json数组:​​

var objArray = [{"name":"xiao","age":12},{"name":"xiao","age":12}];

2、 处理json数据,依赖文件有:jQuery.js
 

3、Note:数据传输过程中,json数据是以文本,即字符串格式形式存在;
JS语言操作的是JS对象;
所以json字符串与JS对象之间的转换是关键;
 

4、数据格式
Json字符串:var json_str = ‘{"name":"xiao","age":12}';
Josn对象:var obj = {"name":"xiao","age":12};
JS对象:Object {name: "xiao", age: 12}
 

5、类型转换
Json字符串——>JS对象,使用方法:

注明:json_str、obj代表的是在本文子标题4中的数据类型;

obj = JSON.parse(json_str);
obj = jQuery.parseJSON(json_str);
Note:传入畸形json字符串(例如:‘{name:"xiao",age:12}'),会抛出异常;
Json字符串格式,严格格式:‘{"name":"xiao","age":12}'
JS对象——>Json字符串:
json_str = JSON. stringify(obj);

NOTE:

1、eval()是JS原生函数,使用该形式:eval(‘('+‘{name:"xiao",age:12}'+')'),并不安全,无法保证类型转换为JS对象;

2、上面3中方法,都经过chrome浏览器测试,下面是测试结果截图;

Json字符串——>JS对象;

JS对象——>Json字符串:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

百度文心一言与Notion的比较(机器人通信的例子)

文心一言出来有一段时间了,也经常会去问问,感觉对于简单的语义理解还是可以,其答案对于一些常见的常识等还是可以给出不错的答案,但是在数学与代码等方面基本上很差,基本的贷款利率、微积分、没有理解语义的代码等都是…

CSDN——Markdown编辑器——快捷键

CSDN——Markdown编辑器——快捷键CSDN——Markdown编辑器——快捷键如下4个,同 word下面的需要加 Shift标题 Ctrl /⌘Shift H // headlineF 和 G在键盘相邻快捷键 的 图标![在这里插入图片描述](https://img-blog.csdnimg.cn/dc02416cebd34c428de54aba5e66c40a.png…

蓝桥杯 --- 数学与简单DP

蓝桥杯 --- 数学与简单DP数学1205. 买不到的数目1211. 蚂蚁感冒1216. 饮料换购简单DP2. 01背包问题1015. 摘花生895. 最长上升子序列数学 1205. 买不到的数目 小明开了一家糖果店。 他别出心裁:把水果糖包成4颗一包和7颗一包的两种。 糖果不能拆包卖。 小朋友来…

springcloud:xxl-job的任务触发机制及调度过期策略

0.引言 我们都会用xxl-job,但很少有人能够说清楚xxl-job的任务触发机制,面临任务阻塞、服务重启如何处理任务,本期我们就来一起看看xxl-job的任务触发机制 1. 调度过期策略 我们在配置策略时可以看到有一个调度过期策略配置,也…

二叉树的四种遍历方式以及必备的面试题(附图解)

二叉树的四种遍历方式以及必备的面试题 文章目录二叉树的四种遍历方式以及必备的面试题前言一、构建一个二叉树二、四种遍历方式1.前序遍历2.中序遍历3.后序遍历附加: 前三种遍历对比图4.层序遍历三、四种遍历相关的面试题1.第一题:144. 二叉树的前序遍历(1)题目&am…

LeetCode.每日一题 831. 隐藏个人信息

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…

C语言函数:内存函数memcmp()

wpC语言函数&#xff1a;内存函数memcmp()以及函数实现与使用。 memcmp()&#xff1a; 头文件:#include <string.h> 作用&#xff1a; 进行内存比较。 参数&#xff1a; 解释&#xff1a;ptr1和ptr2是指针&#xff0c;从这个两个指针开始往后num个字节&#xff0c;将两…

【Python入门第四十六天】Python丨NumPy 数组重塑

数组重塑 重塑意味着更改数组的形状。 数组的形状是每个维中元素的数量。 通过重塑&#xff0c;我们可以添加或删除维度或更改每个维度中的元素数量。 从 1-D 重塑为 2-D 实例 将以下具有 12 个元素的 1-D 数组转换为 2-D 数组。 最外面的维度将有 4 个数组&#xff0c;…

【Redis】BigKey问题

文章目录MoreKey案例大批量往redis里面插入100W测试数据key(管道)生产上限制keys*/flushdb/flushall等危险命令以防止误删误用scan命令代替了keys *,避免了查询卡顿BigKey案例多大算大key危害如何产生如何发现 redis-cli --bigkeys、memory usage如何删除->渐进式删除BigKey…

C++面经总结4

说一下new和malloc的区别 new是操作符&#xff0c; malloc是函数 malloc申请的空间是不能初始化的&#xff0c; 而new是可以初始化的 malloc申请空间的时候需要手动计算空间大小&#xff0c;而new可以直接在[]里面给个数就行。 malloc的返回值是void*, 使用时必须强转&#xf…

FFmpeg添加字幕的详细操作

FFmpeg添加字幕的详细操作 在视频中添加字幕可以使视频更具可读性&#xff0c;并为观众提供更好的观看体验&#xff0c;这在多语种内容中尤为重要。FFmpeg是一个流行的开源视频处理工具&#xff0c;它可以被用来给视频添加字幕。本文将介绍FFmpeg集成libass的编译流程&#xf…

【沐风老师】教你在3dMax中使用Greeble插件结合变形修改器建模

3dMax在Greeble中使用变形修改器 Greeble一个有趣的修改器插件,用于快速生成诸如低模城市建筑群、太空船模型、死亡星等的随机细节。。。 我们在之前的教程中介绿过Greeble的安装和基本使用方法,在本教程中,我们将学习如何使用Greeble插件和变形修改器来制作效果。 【开始…

深度学习数据集—水果数据集大合集

近期整理的各类水果&#xff08;包括干果&#xff09;数据集&#xff0c;分享给大家。 1、8类水果图片数据集&#xff08;每类100张图片左右&#xff09;[橘子&#xff0c;菠萝&#xff0c;苹果&#xff0c;木瓜&#xff0c;火龙果&#xff0c;香蕉&#xff0c;樱桃&#xff0…

聊天Chat

前言 加油 原文 聊天常用会话 ❶ Don’t count on him. 别指望他。 ❷ They underestimated the enemy’s strength. 他们低估了敌人的力量。 ❸ The plan went according to his perspective. 计划是按照他的想法进行的。 ❹ This project involves many difficulties. …

【C++】开散列哈希表封装实现unordered_map和unordered_set

在未达成目的之前&#xff0c;一切具有诱惑力的事物都显得那么不堪一击 文章目录一、unordered系列关联式容器二、哈希函数和哈希冲突三、闭散列&#xff08;你抢我的位置&#xff0c;我抢他的位置&#xff09;1.哈希表结构2.Insert()3.Erase()&#xff08;标记的伪删除法&…

归并排序介绍、详解、案例

排序 计数排序介绍、详解、案例快速排序介绍、详解、案例归并排序介绍、详解、案例 归并排序也是基于分治法的排序算法&#xff0c;为了排序长度为n的数组&#xff0c;需要先排序长度为n/2的字数组&#xff0c;然后合并这两个排序字数组于是整个数组也就排序完毕。 排序过程 以…

浅谈JVM(五):虚拟机栈帧结构

上一篇&#xff1a; 浅谈JVM(一)&#xff1a;Class文件解析 浅谈JVM(二)&#xff1a;类加载机制 浅谈JVM(三)&#xff1a;类加载器和双亲委派 浅谈JVM(四)&#xff1a;运行时数据区 5.虚拟机栈帧结构 ​ 方法是程序执行的最小单元&#xff0c;每个方法被执行时都会创建一个栈帧…

驱动开发:内核使用IO/DPC定时器

本章将继续探索驱动开发中的基础部分&#xff0c;定时器在内核中同样很常用&#xff0c;在内核中定时器可以使用两种&#xff0c;即IO定时器&#xff0c;以及DPC定时器&#xff0c;一般来说IO定时器是DDK中提供的一种&#xff0c;该定时器可以为间隔为N秒做定时&#xff0c;但如…

内卷?焦虑?35岁?找不到工作?端正态度激励一下正在挣扎的Android程序员

前言 亲爱的各位Android程序员&#xff0c;您们好&#xff1a; 我理解您们的焦虑和困惑&#xff0c;但我想告诉您的是&#xff1a;作为一名Android程序员&#xff0c;您依然是非常有前途和市场需求的职业人才。 首先&#xff0c;您要知道&#xff0c;移动互联网时代的普及率…

【数据结构】时间复杂度和空间复杂度

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法ing ✈️专栏&#xff1a;【数据结构】 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点…