JSON数据的处理

—– Java部分

Java程序如何解析json文件中的数据

myJson.json文件

{
“company”:”Oracle”,
“employees”:[
{“name”:”frank”,”job”:”manager”},
{“name”:”cherry”,”job”:”finance”},
{“name”:”mark”,”job”:”seller”}
],
“sign”:true
}

这里写图片描述

这里写图片描述

只导入上图所示的 gson-2.2.4.jar 包即可

这里写图片描述

项目文件结构如上图所示

HandleJson.java 文件

项目文件结构如上图所示

HandleJson.java 文件

package demo;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Iterator;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonIOException;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;
public class HandleJson {
     public static void main(String[] args) {
          try {
                //A parser to parse Json into a parse tree of JsonElements
               JsonParser parser = new JsonParser();
                //A class representing an object type in Json. An object consists of name-value pairs where names are strings, and values are any other type of JsonElement. This allows for a creating a tree of JsonElements. The member elements of this object are maintained in order they were added.
               JsonObject obj = (JsonObject) parser.parse(new FileReader( "myJson.json")); 
               System.out.println("company = " + obj.get("company").getAsString());
               System.out.println("sign = " + obj.get("sign").getAsBoolean());
                //A class representing an array type in Json. An array is a list of JsonElements each of which can be of a different type. This is an ordered list, meaning that the order in which elements are added is preserved.
               JsonArray array = obj.get("employees").getAsJsonArray();
               String nameInfo = null;
               String jobInfo = null;
               System.out.println("-------------------------------");
               System.out.println("employees:");
               for (int i = 0; i < array.size(); i++) {
                        JsonObject subObj = (JsonObject) array.get(i);
                        nameInfo = "name = " + subObj.get("name").getAsString();
                        jobInfo = "job = " + subObj.get("job").getAsString();
                        System.out.println("\t" + nameInfo + " " + jobInfo);
                }
          } catch (JsonIOException e) {
                   e.printStackTrace();
          } catch (JsonSyntaxException e) {
                   e.printStackTrace();
          } catch (FileNotFoundException e) {
                   e.printStackTrace();
          }
     }
}

Java程序如何创建json格式的数据

package demo;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
public class CreateJson {
     public static void main(String[] args) {
          JsonObject object = new JsonObject();
          object.addProperty("company", "Oracle");
          JsonArray array = new JsonArray();
          JsonObject subObject1 = new JsonObject();
          subObject1.addProperty("name", "frank");
          subObject1.addProperty("job", "manager");
          array.add(subObject1);
          JsonObject subObject2 = new JsonObject();
          subObject2.addProperty("name", "cherry");
          subObject2.addProperty("job", "finance");
          array.add(subObject2);
          JsonObject subObject3 = new JsonObject();
          subObject3.addProperty("name", "mark");
          subObject3.addProperty("job", "seller");
          array.add(subObject3);
          object.add("employees", array);
          object.addProperty("sign", true);
          System.out.println(object.toString());
     }
}

看一下console面板的输出:
{“company”:”Oracle”,”employees”:[{“name”:”frank”,”job”:”manager”},{“name”:”cherry”,”job”:”finance”},{“name”:”mark”,”job”:”seller”}],”sign”:true}

与之前自己创建的json文件的内容和格式一致!


——– PHP部分

PHP 解析json数据

环境配置

在 php5.2.0 及以上版本已经内置 JSON 扩展。
PHP中的JSON 函数

函数 描述
json_encode 对变量进行 JSON 编码
json_decode 对 JSON 格式的字符串进行解码,转换为 PHP 变量
json_last_error 返回最后发生的错误
详细讲解,请参考 http://www.w3cschool.cc/php/php-json.html

index.html

<form action="json.php" method="post">
    <textarea id="jsonText" name="jsonTxt" style="width: 80%;height: 50%;margin: 20px auto;border: solid #ff0000 2px;">
    </textarea><br>
    <button type="submit" id="btn">向服务器发送json格式的字符串</button>
</form>

handleJSON.js

$(function () {
    var jsonTxt = '{"company":"Oracle","employees":[{"name":"frank","job":"manager"},{"name":"cherry","job":"finance"},{"name":"mark","job":"seller"}],"sign":true}';
    $("#jsonText").val(jsonTxt);
});

json.php

<?php
    $jsonTxt = $_POST["jsonTxt"];
//    jsonjson_decode()方法的第一个参数是json格式的文本,第二个参数为一个布尔值,默认为FALSE,表示返回一个php对象,如果为TRUE,则返回一个数组
    $json_object = json_decode($jsonTxt);
    $json_array = json_decode($jsonTxt,true);
    var_dump($json_object);
    echo "<p></p>";
    var_dump($json_array);
?>

在页面中会看到两段内容,一个是php对象,一个是php的关联数组
object(stdClass)#1 (3) { [“company”]=> string(6) “Oracle” [“employees”]=> array(3) { [0]=> object(stdClass)#2 (2) { [“name”]=> string(5) “frank” [“job”]=> string(7) “manager” } [1]=> object(stdClass)#3 (2) { [“name”]=> string(6) “cherry” [“job”]=> string(7) “finance” } [2]=> object(stdClass)#4 (2) { [“name”]=> string(4) “mark” [“job”]=> string(6) “seller” } } [“sign”]=> bool(true) }

array(3) { [“company”]=> string(6) “Oracle” [“employees”]=> array(3) { [0]=> array(2) { [“name”]=> string(5) “frank” [“job”]=> string(7) “manager” } [1]=> array(2) { [“name”]=> string(6) “cherry” [“job”]=> string(7) “finance” } [2]=> array(2) { [“name”]=> string(4) “mark” [“job”]=> string(6) “seller” } } [“sign”]=> bool(true) }

那么下面,我们就可以通过php的对象操作和php的遍历关联数组的操作来处理和使用这些json数据了。比如存储进服务器端的数据库,或者是传递给其他php变量。

关于php的对象操作和关联数组操作,以后再复习php后进行吧!


—– Javascript部分

javascript 解析json数据

实例一:

这个实例是在javascript文件中直接创建也json对象

在js文件中直接创建一个json对象

var jsonObject = {
  "company": "Oracle",
  "employees": [{"name": "frank", "job": "manager"}, {"name": "cherry", "job": "finance"}, {"name": "mark","job": "seller"}],
  "sign": true
};

在HTML 中为这些数据设定好标签,以便来显示

<div>
    <h4>Company: <span id="company"></span></h4>
    <h4>Employees:
        <ul>
            <li class="emp1">
                <span class="name"></span>
                <span class="job"></span>
            </li>
            <li class="emp2">
                <span class="name"></span>
                <span class="job"></span>
            </li>
            <li class="emp3">
                <span class="name"></span>
                <span class="job"></span>
            </li>
        </ul>
    </h4>
    <h4>Sign: <span id="sign"></span></h4>
</div>

为了书写方便,这里引入了jQuery,按照jQuery的语法来书写

$("#company").text(jsonObject.company);
$("#sign").text(jsonObject.sign);

for (var i = 0; i < jsonObject.employees.length; i++) {
    var empClass = "emp" + (i + 1);
    $("." + empClass).children(".name").text(jsonObject.employees[i].name + " | ");
    $("." + empClass).children(".job").text(jsonObject.employees[i].job);
}

实例二:

从服务器端得到一段字符串,这个字符串里是按照json语法书写的,那么在客户端的javascript程序中可以将这段字符串变成json对象来使用 由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。

index.html

<label>就差公司的名字啦!请在下面的输入框中填写一个你想入职的公司名</label>

<p/>
<input type="text" name="company" list="companyList" id="companyInfo">
<datalist id="companyList">
    <option value="Apple">Apple</option>
    <option value="Oracle">Oracle</option>
    <option value="Microsoft">Microsoft</option>
    <option value="Amazon">Amazon</option>
    <option value="Sony">Sony</option>
    <option value="IBM">IBM</option>
    <option value="Baidu">Baidu</option>
    <option value="Alibaba">Alibaba</option>
    <option value="Tencent">Tencent</option>
</datalist>
<button type="button" id="btn">提交</button>
<hr>
<h3>从服务器返回的json数据</h3>

<div>
    <h4>Company: <span id="company"></span></h4>
    <h4>Employees:
        <ul>
            <li class="emp1">
                <span class="name"></span>
                <span class="job"></span>
            </li>
            <li class="emp2">
                <span class="name"></span>
                <span class="job"></span>
            </li>
            <li class="emp3">
                <span class="name"></span>
                <span class="job"></span>
            </li>
        </ul>
    </h4>
    <h4>Sign: <span id="sign"></span></h4>
</div>

handleJson.js

$(document).ready(function () {
    $("#btn").click(function () {
        $.post(
            "json.php",
            {
                company: $("#companyInfo").val()
            },
            function (data) {
                var jsonTxt = eval("(" + data + ")");
                $("#company").text(jsonTxt.company);
                $("#sign").text(jsonTxt.sign);

                for (var i = 0; i < jsonTxt.employees.length; i++) {
                    var empClass = "emp" + (i + 1);
                    $("." + empClass).children(".name").text(jsonTxt.employees[i].name + " | ");
                    $("." + empClass).children(".job").text(jsonTxt.employees[i].job);
                }
            }
        )
    });
});

json.php

<?php
    $company=$_POST["company"];
    $json_txt='{"company":"'.$company.'","employees":[{"name":"frank","job":"manager"},{"name":"cherry","job":"finance"},{"name":"mark","job":"seller"}],"sign":true}';
   echo $json_txt;
?>

1、客户端填写了一个公司名称后,当点击按钮时,利用jQuery的Ajax方式,向php文件发送这个用户填写的数据;
2、在php端,经过字符串的拼接,形成了一个json格式的文本,然后php文件把这个文本信息返回给javascript文件;
3、javascript文件里的Ajax的回调函数接收这个json文本,通过eval()函数将json文本转换为json对象;
4、最后在HTML页面中显示;

实例三:

有一个独立的json文件,里面定义了json对象的数据

data.json

{
  "company":"Oracle",
  "employees":[
    {"name":"frank","job":"manager"},
    {"name":"cherry","job":"finance"},
    {"name":"mark","job":"seller"}
  ],
  "sign":true
}

在页面上放置一个按钮,用于操作;再放一些标签,用于显示json数据

index.html

<button type="button" id="btn">获取json文件的数据</button>
<hr>
<div>
    <h4>Company: <span id="company"></span></h4>
    <h4>Employees:
        <ul>
            <li class="emp1">
                <span class="name"></span>
                <span class="job"></span>
            </li>
            <li class="emp2">
                <span class="name"></span>
                <span class="job"></span>
            </li>
            <li class="emp3">
                <span class="name"></span>
                <span class="job"></span>
            </li>
        </ul>
    </h4>
    <h4>Sign: <span id="sign"></span></h4>
</div>

通过jQuery的$.getJSON()方法来读取json文件,并将返回的数据自动转换为json对象,无需再手动操作。

handle.js

$(document).ready(function () {
    var company = null;

    $("#btn").click(function () {
        $.getJSON("data.json", function (jsonObject) {
            $("#company").text(jsonObject.company);
            $("#sign").text(jsonObject.sign);

            for (var i = 0; i < jsonObject.employees.length; i++) {
                var empClass = "emp" + (i + 1);
                $("." + empClass).children(".name").text(jsonObject.employees[i].name + " | ");
                $("." + empClass).children(".job").text(jsonObject.employees[i].job);
            }
        })
    })
});

有关$.getJSON()方法的介绍,请看W3C教程 http://www.w3cschool.cn/ajax_getjson.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值