—– 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