浅析json与jsonp区别及通过ajax获得json数据后格式的转换

下面就详细讲解一下关于“浅析json与jsonp区别及通过ajax获得json数据后格式的转换”的攻略。

一、JSON与JSONP的区别

1. JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,这种文本格式很容易被人类阅读和编写,同时也很容易被机器解析和生成。在现代web应用中,JSON已经成为了一种非常流行的数据格式,用来代替XML格式来作为数据的传输方式。

JSON数据格式基本上由两种数据结构,对象和数组表示。对象是一个无序的键值对集合,用花括号 {} 表示,每个键值对之间使用冒号 : 分隔开来。例如:

{
    "name": "John",
    "age": 20,
    "address": {
        "city": "Beijing",
        "street": "Xidan"
    }
}

数组是值的一个有序集合,用方括号 [] 表示,在数组中的每个值之间使用逗号 , 分隔开来。例如:

[
    "apple",
    "banana",
    "orange"
]

2. JSONP

JSONP (JSON with Padding) 是一种跨域数据请求方式,它允许在服务器端动态地生成JSON数据并将其在客户端调用指定的函数时作为参数传递。

JSONP主要是通过script标签的src属性来请求数据,服务器返回的是一段JavaScript代码,而这段代码的执行结果就是所需的JSON数据。例如:

/* HTML页面中的代码 */
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSONP示例</title>
</head>
<body>
    <div id="result"></div>

    <script>
        function handleJSONP(data) {
            document.getElementById("result").innerHTML = JSON.stringify(data);
        }

        var script = document.createElement("script");
        script.src = "http://example.com/data.php?callback=handleJSONP";
        document.getElementsByTagName("head")[0].appendChild(script);
    </script>
</body>
</html>

/* PHP服务器端的代码 */
<?php
$jsonData = array(
    "name" => "John",
    "age" => 20,
    "address" => array(
        "city" => "Beijing",
        "street" => "Xidan"
    )
);

$callback = $_GET["callback"];
echo $callback . "(" . json_encode($jsonData) . ")";
?>

上述代码中的handleJSONP函数就是客户端指定的回调函数,服务器端返回的数据将被作为回调函数调用时的第一个参数传入。

二、通过AJAX获得JSON数据后的格式转换

在前端开发中,我们常常通过AJAX来异步获取数据,这些数据可能是JSON格式的数据,因此需要进行一些格式的转换才能适用于我们的程序。

1. 获取JSON数据

我们可以通过下面的方式使用AJAX来获取JSON数据:

/* 建立AJAX对象 */
var xhr = new XMLHttpRequest();

/* 监听数据返回事件 */
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
        var jsonData = JSON.parse(xhr.responseText);
        console.log(jsonData);
    }
};

/* 发送AJAX请求 */
xhr.open("GET", "http://example.com/data.json", true);
xhr.send();

上述代码中,我们使用了XMLHttpRequest对象来发起一个异步请求,当返回的数据状态码为200时,可以获取到返回的数据,并使用JSON.parse方法将其转换为JSON对象。

2. JSON转对象/字符串

在JavaScript中,我们可以使用JSON对象提供的parse和stringify方法来完成JSON与JavaScript对象/字符串之间的相互转换。

2.1 JSON转对象

我们可以使用JSON.parse方法将JSON格式的字符串转换为JavaScript对象。例如:

var jsonString = '{"name":"John","age":20,"address":{"city":"Beijing","street":"Xidan"}}';
var jsonObject = JSON.parse(jsonString);
console.log(jsonObject);

上述代码中,我们将JSON格式的字符串存放到了变量jsonString中,并使用JSON.parse方法将其转换为JavaScript对象,并将其赋值给了变量jsonObject。

2.2 JSON转字符串

我们可以使用JSON.stringify方法将JavaScript对象/数组转换为JSON格式的字符串。例如:

var jsonObject = {
    "name": "John",
    "age": 20,
    "address": {
        "city": "Beijing",
        "street": "Xidan"
    }
};
var jsonString = JSON.stringify(jsonObject);
console.log(jsonString);

上述代码中,我们将JavaScript对象{…}存放到了变量jsonObject中,使用JSON.stringify方法将其转换为JSON格式的字符串,并将其赋值给了变量jsonString。

三、示例说明

下面通过两个示例来说明一下JSON和JSONP的使用:

1. 使用JSONP获取百度热榜

我们可以通过JSONP来获取百度热榜的数据,代码如下:

/* 首先定义一个叫做baiduHot的全局函数 */
function baiduHot(data) {
    console.log(data);
}

/* 创建script标签来发起请求 */
var script = document.createElement("script");
script.src = "http://top.baidu.com/buzz?b=1&jsonp=baiduHot";
document.getElementsByTagName("head")[0].appendChild(script);

上述代码中,我们定义了一个全局函数baiduHot,用来处理返回的数据,调用时将数据作为参数传入。然后通过创建script标签,并将其添加到文档中来发起JSONP请求,将指定的回调函数名字jsonp=baiduHot传入。

2. 使用AJAX获取新浪微博数据

我们可以通过AJAX来获取新浪微博的数据,并将获取到的JSON数据转换为字符串格式。代码如下:

/* 建立AJAX对象 */
var xhr = new XMLHttpRequest();

/* 监听数据返回事件 */
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
        var jsonData = JSON.parse(xhr.responseText);
        var jsonString = JSON.stringify(jsonData);
        console.log(jsonString);
    }
};

/* 发送AJAX请求 */
xhr.open("GET", "http://api.weibo.com/2/statuses/public_timeline.json?source=211160679", true);
xhr.send();

上述代码中,我们使用AJAX来获取新浪微博公共时间线的数据,并在响应中将其转换为JSON对象,然后使用JSON.stringify方法将其转换为字符串形式。最终将转换后的字符串打印出来。

以上便是关于“浅析JSON与JSONP区别及通过AJAX获得JSON数据后格式的转换”的攻略了。如果还有不清楚的地方,可以再联系我哦~

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析json与jsonp区别及通过ajax获得json数据后格式的转换 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 开机显示文件BOOT.INI非法正从C:\windows\启动怎么办?

    “开机显示文件BOOT.INI非法正从C:\windows\启动怎么办?”的完整攻略 症状描述 当开机时,可能会遇到以下错误信息: 文件BOOT.INI非法 正从C:\windows\启动 该错误表明系统在启动时无法找到或读取BOOT.INI文件,因此无法引导操作系统。 解决步骤 步骤一:准备Windows系统安装光盘或U盘 由于Windows安装光盘或U盘…

    C 2023年5月23日
    00
  • java 出现Zipexception 异常的解决办法

    当我们使用 Java 解压缩 zip 文件时,有时候会遇到 ZipException 异常,这主要是由于 zip 文件损坏或者 zip 文件格式不正确导致的。本文将会详细介绍如何解决这个问题。 解决方案 检查 zip 文件是否被损坏:如果 zip 文件损坏,那么在解压缩时就会出现异常。可以使用 WinRAR 或其他压缩软件对文件进行检查或尝试重新下载文件。如…

    C 2023年5月23日
    00
  • C++中四种加密算法之AES源代码

    C++中四种加密算法之AES源代码 什么是AES算法 AES是Advanced Encryption Standard的缩写,它是一种对称加密算法,也是目前最常用的加密算法之一。AES算法可以对数据进行加密和解密,同时还能保证数据的完整性和安全性。 AES算法实现步骤 AES算法实现一般包含以下几个步骤: 密钥扩展:对输入密钥进行处理,扩展成多个轮密钥。 初…

    C 2023年5月23日
    00
  • C++三色球问题描述与算法分析

    下面是详细讲解C++三色球问题的完整攻略: 问题描述 假设有n个球,其中有红、黄、蓝三种颜色的球,每种颜色至少有一个球。将这n个球排成一列,并记下它们的颜色序列。请问,有多少种不同的颜色序列方式? 算法分析 可以使用递归算法来解决这个问题。 我们可以把球分为两个部分,第一个和剩下的n-1个。那么就可以先求出剩下的n-1个球的颜色排序,然后将第一个球插入到所有…

    C 2023年5月22日
    00
  • Java Exception异常全方面分析

    Java Exception异常全方面分析 Java中异常是程序运行中发生的错误或者异常情况的标志,有时我们无法避免由于代码本身的错误或者外在因素导致程序发生异常。因此,掌握异常的相关知识,在开发过程中是非常必要的。 本文将全方面地讲解Java中异常的相关知识,包括异常的类型、异常处理、异常抛出与捕获等内容,旨在帮助Java开发者更好地理解和使用异常。 异常…

    C 2023年5月23日
    00
  • golang struct json tag的使用以及深入讲解

    让我来详细讲解一下 “golang struct json tag的使用以及深入讲解” 的攻略。 1. 什么是 struct json tag? golang中,可以在一个 struct 中通过添加 json tag,来指定如何将 struct 转换为 JSON 格式(序列化)或将 JSON 数据转换为 struct(反序列化)。在 JSON Tag 中,一…

    C 2023年5月23日
    00
  • Python解析JSON对象的全过程记录

    Python解析JSON对象的全过程记录 什么是JSON格式 JSON(JavaScript Object Notation)是JavaScript对象表示法。它是一种轻量级的数据交换格式。JSON是一种数据格式,类似于XML格式,但是更加轻量级,易于阅读和编写。JSON格式数据在存储和传输数据时具有很大的优势。JSON格式是由JavaScript语言发展而…

    C 2023年5月23日
    00
  • C++类与对象的基础知识点详细分析

    C++类与对象的基础知识点详细分析 前言 在C++中,类是一种自定义数据类型,可以封装数据和方法,并将其作为对象。本文将详细介绍C++类和对象的相关内容。 类和对象的定义 类是由数据和函数组成的用户自定义数据类型。它可以定义为结构体或类。类定义了一个数据类型,数据类型包含数据成员和成员函数。 一个对象是类的一个实例。对象由数据和函数组成,对象存储在内存中,其…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部