JSONとは
jsonの完全な英語名はJavaScriptObject Notationで、これはJavaScriptオブジェクト表記法です。
一般的に、Javaの一般的なオブジェクト表現メソッドは次のとおりです。
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
var p = {
"name":"李四","age":23,"gender":"女"};
jsオブジェクトで表される場合
var p = {
"name":"李四","age":23,"gender":"女"};
Jsonは、実際には一種のjsオブジェクト表現です。JSONは現在、データ転送用のテキスト情報の保存と交換に主に使用されています。JSONは、XMLよりも小さく、高速で、解析が簡単です。
JSONの使用方法
文法
一般的なルール
データは名前と値のペアになっています:jsonデータは、キーと値のペアで構成
され、引用符(シングルとダブルの両方)で囲まれている、または引用符なしのキーです。
値のタイプ:
- 数値(整数または浮動小数点)
- 文字列(二重引用符で囲む)
- 論理値(trueまたはfalse)
- 配列(角括弧内){"persons":[{}、{}]}
- オブジェクト(中括弧内){"address":{"province": "Zhejiang" ...}}
- ヌルデータ
はコンマで区切られます:複数のキーと値のペアはコンマで区切られます。中
括弧はオブジェクトを保存します:{}を使用してjson形式を定義し、
角括弧を使用して配列を保存します:[]
jsonのいくつかの方法を定義します:
window.onload=function () {
//基本格式
var person = {
"name":"zhangsan",age:23,"gender":true};
alert(person);
//嵌套格式 {}---->[]
var persons= {
"persons":[
{
"name":"zhangsan",age:23,"gender":true},
{
"name":"lisi",age:23,"gender":true},
{
"name":"wangwu",age:23,"gender":false}
]
};
alert(persons)
//嵌套格式 []----->{}
var ps=[
{
"name":"zhangsan",age:23,"gender":true},
{
"name":"lisi",age:23,"gender":true},
{
"name":"wangwu",age:23,"gender":false}
];
alert(ps);
}
データを取得するためのJSON
単一のjsonオブジェクトのプロパティを取得します
var person = {
"name":"zhangsan",age:23,"gender":true};
let ps1=person.name;
var ps2 = person["name"];
alert(ps2);
alert(ps1);
json配列のオブジェクトのプロパティを取得する
方法1:
var persons= {
"persons":[
{
"name":"zhangsan",age:23,"gender":true},
{
"name":"lisi",age:23,"gender":true},
{
"name":"wangwu",age:23,"gender":false}
]
};
var name = persons.persons[2].name;
alert(name);
方法2:
var ps=[
{
"name":"wangwu",age:23,"gender":true},
{
"name":"lisi",age:23,"gender":true},
{
"name":"wangwu",age:23,"gender":false}
];
var ps1= ps[1].name;
alert(ps1);
JSONトラバーサルデータ
オブジェクトをトラバースします。
var person = {
"name":"zhangsan",age:23,"gender":true};
for(let key in person){
//这种获取方式有问题,相当于person.“key”
alert(key+":"+person[key]);
}
オブジェクトの配列を反復処理します
//嵌套格式 {}----->[]
var persons= {
"persons":[
{
"name":"zhangsan",age:23,"gender":true},
{
"name":"lisi",age:23,"gender":true},
{
"name":"wangwu",age:23,"gender":false}
]
};
var ps1 = persons.persons;
//alert(ps1);
for (let i = 0; i < ps1.length; i++) {
for(let key in ps1[i]){
//这种获取方式有问题,相当于person.“key”
alert(key+":"+ps1[i][key]);
}
}
//嵌套格式 []----->{}
var ps=[
{
"name":"zhangsan",age:23,"gender":true},
{
"name":"lisi",age:23,"gender":true},
{
"name":"wangwu",age:23,"gender":false}
];
for (let i = 0; i < ps.length; i++) {
let p = ps[i];
for(key in p){
alert(key+"-->"+p[key]);
}
}
JSONオブジェクトとJAVAオブジェクト間の変換
JSONパーサー
一般的なJSONパーサー
JsonLib:JSONは、
Gson:Google社によって正式に提供されています
fastJson:Alibaba
jackson:springは組み込みのJsonパーサーです。jackson
は組み込みのjson変換ツールであるため、以下ではジャクソン関連のメソッドに焦点を当てます。
JSON—> java
- ジャクソン関連のjarパッケージをインポートする
- JacksonコアオブジェクトObjectMapperを作成します
- ObjectMapperの関連するメソッドを呼び出して、
readValue(json string data、Class)を変換します。
java—> JSON
使用手順:
- ジャクソン関連のjarパッケージをインポートする
- JacksonコアオブジェクトObjectMapperを作成します
- ObjectMapperの関連するメソッドを呼び出して変換します
```java
@Test
public void test05() throws Exception {
//1.初始化JSON字符串
String json = "{\"gender\":\"男\",\"name\":\"张三\",\"age\":23}";
//2.创建ObjectMapper对象
ObjectMapper mapper = new ObjectMapper();
//3.转换为Java对象 Person对象
Person person = mapper.readValue(json, Person.class);
System.out.println(person);
}
パラメータ1:
ファイル:objオブジェクトをJSON文字列に
変換し、指定されたファイルに保存しますライター:objオブジェクトをJSON文字列に変換し、jsonデータを文字出力ストリームに入力します
。OutputStream:objオブジェクトをJSONに変換します文字列、およびjsonデータをバイト出力ストリームに入力します
writeValue(parameter 1、obj):
writeValueAsString(obj):オブジェクトをjson文字列に変換します
2. 注解:
```java
1. @JsonIgnore:排除属性。
2. @JsonFormat:属性值得格式化
@JsonFormat(pattern = "yyyy-MM-dd")
- 複雑なJavaオブジェクト変換
1)リスト:配列
2)マップ:オブジェクト形式は一貫しています
ユーザー名を確認する
サーバーによって応答されたデータは、クライアントで使用するときにjsonデータ形式として使用する必要があります。2つの解決策があります:
- $ .get(type):最後のパラメータータイプを「json」として指定します
- サーバー側でMIMEタイプを設定します
response.setContentType("application/json;charset=utf-8");
フロントエンドコード。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
<script src="js/jquery-1.8.3.min.js"></script>
<script>
$(function () {
$("#username").blur(function () {
var username = $(this).val();
$.get("findUserServlet",{
username:username},function (data) {
let span = $("#s_username");
if(data.userExsit){
span.css("color","red");
span.html(data.msg);
}else {
span.css("color","green");
span.html(data.msg);
}
},"json");
});
})
</script>
</head>
<body>
<form>
<input type="text" id="username" name="username" placeholder="请输入用户名">
<span id="s_username"></span>
<br>
<input type="password" name="password" placeholder="请输入密码"><br>
<input type="submit" value="注册"><br>
</form>
</body>
</html>
バックエンドコード;
@WebServlet("/findUserServlet")
public class FindUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
response.setContentType("text/html;charset=utf-8");
//response.setContentType("application/json;charset=utf-8");
Map<String, Object> map = new HashMap<>();
if("tom".equals(username)){
map.put("userExsit",true);
map.put("msg","此用户太受欢迎更换一个吧......");
}else{
map.put("userExsit",false);
map.put("msg","用户名可用");
}
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(response.getWriter(),map);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
演算結果: