JSONPath:從多個方面深入理解

一、Jsonpath取值

取值是Jsonpath中最基本的操作,它能快速準確地獲取需要的數據。Jsonpath取值的基本語法格式如下:

$.[key1,key2,...,keyn]

其中,$表示根節點,在括號中指定需要獲取的key,如[key1,key2,…,keyn]。下面是一個示例:

{
  "person": {
    "name": "張三",
    "age": 30,
    "address": {
      "city": "北京",
      "street": "朝陽區"
    },
    "phone": [
      {
        "type": "home",
        "number": "010-xxxx"
      },
      {
        "type": "work",
        "number": "020-xxxx"
      }
    ]
  }
}

取值示例:

$.person.name        // 輸出:"張三"
$.person.age         // 輸出:30
$.person.address.city // 輸出:"北京"
$.person.phone[0].number // 輸出: "010-xxxx"

二、怎麼下載JSONPath庫

要使用Jsonpath,需要引入Jsonpath庫。可以通過以下方式安裝:

npm install jsonpath

也可以直接下載Jsonpath的js文件,然後在HTML中引用:

<script src="jsonpath.js"></script>

三、JSONPath解析JSON

Jsonpath最常見的應用是解析JSON。Jsonpath提供了一種簡潔明了的方式,讓我們能夠輕鬆地從JSON中取出需要的數據。下面是一個示例:

{
  "store": {
    "book": [
      {
        "title": "JavaScript權威指南",
        "author": "Flanagan",
        "year": 2006,
        "price": 49.99
      },
      {
        "title": "Java核心技術卷I",
        "author": "Cay Horstmann",
        "year": 2015,
        "price": 59.99
      },
      {
        "title": "Python基礎教程",
        "author": "Magnus Lie Hetland",
        "year": 2008,
        "price": 39.95
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}

取出所有書籍的作者:

$.store.book[*].author

輸出:

[
  "Flanagan",
  "Cay Horstmann",
  "Magnus Lie Hetland"
]

取出所有書籍的價格:

$.store.book[*].price

輸出:

[
  49.99,
  59.99,
  39.95
]

四、生成JSONPath

生成Jsonpath有時可以幫助我們更好地理解它的取值規則。下面是一些示例:

// 取出所有書籍的作者
$.store.book[*].author

// 取出第一本書的作者
$.store.book[0].author

// 取出前兩本書的作者
$.store.book[:2].author

// 取出最後一本書的作者
$.store.book[-1:].author

// 取出價格大於50的書的作者
$.store.book[?(@.price > 50)].author

五、JSONPath邏輯運算

Jsonpath還支持邏輯運算,如“與”、“或”、“非”等。下面是一些示例:

如果我們要取出所有價格大於50且年份大於2000的書的作者:

$.store.book[?(@.price > 50 && @.year > 2000)].author

如果我們要取出價格大於50或年份大於2000的書的作者:

$.store.book[?(@.price > 50 || @.year > 2000)].author

如果我們要取出價格不等於50的書的作者:

$.store.book[?(@.price != 50)].author

六、JSONPath set

Jsonpath還支持set操作,用於更新JSON數據。set操作的語法格式如下:

$.[key1,key2,...,keyn] = value

其中,$表示根節點,在括號中指定需要更新的key,如[key1,key2,…,keyn]。value是需要更新的值。下面是一個示例:

{
  "person": {
    "name": "張三",
    "age": 30,
    "address": {
      "city": "北京",
      "street": "朝陽區"
    },
    "phone": [
      {
        "type": "home",
        "number": "010-xxxx"
      },
      {
        "type": "work",
        "number": "020-xxxx"
      }
    ]
  }
}

假設我們要將張三的年齡修改為32歲,可以使用如下Jsonpath:

$.person.age = 32

修改後的結果如下:

{
  "person": {
    "name": "張三",
    "age": 32,
    "address": {
      "city": "北京",
      "street": "朝陽區"
    },
    "phone": [
      {
        "type": "home",
        "number": "010-xxxx"
      },
      {
        "type": "work",
        "number": "020-xxxx"
      }
    ]
  }
}

七、怎麼導入JSONPath庫

在Node.js中,可以通過require的方式導入Jsonpath庫,在代碼中使用:

const jsonpath = require('jsonpath');

在瀏覽器中,可以通過script標籤引入Jsonpath庫,然後使用全局變量JsonPath:

<script src="jsonpath.js"></script>

// 使用全局變量JsonPath
JsonPath.query(data, "$.store.book[*].author");

八、JSON Parse方法選取

除了Jsonpath之外,還有其他選取JSON數據的方法。下面給出一些示例:

方法一:使用JSON.parse方法解析JSON數據,然後使用點號和中括號來取值。

const data = '{"person": {"name": "張三", "age": 30}}';
const obj = JSON.parse(data);
console.log(obj.person.name);  // 輸出:"張三"
console.log(obj['person']['age']);  // 輸出:30

方法二:使用Lodash庫的get方法取值。

const data = '{"person": {"name": "張三", "age": 30}}';
const obj = JSON.parse(data);
console.log(_.get(obj, 'person.name')); // 輸出:"張三"

方法三:使用Axios庫發起網絡請求獲取JSON數據,然後使用點號和中括號來取值。

axios.get('/api/data').then(res => {
  console.log(res.data.person.name); // 輸出:"張三"
  console.log(res.data['person']['age']); // 輸出:30
})

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/275819.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-17 16:06
下一篇 2024-12-17 16:06

相關推薦

發表回復

登錄後才能評論