自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

竟然還能這樣高效地操作 JSON 對(duì)象!

開發(fā) 前端
當(dāng)處理大型或復(fù)雜的 JSON 數(shù)據(jù)結(jié)構(gòu)時(shí),定位特定值可能會(huì)變得非常麻煩。使用 JSON Pointer 可以讓你以一種簡單而準(zhǔn)確的方式指定所需值的位置,而不需要編寫復(fù)雜的代碼來遍歷整個(gè) JSON 結(jié)構(gòu)。

什么是 JSON Pointer

JSON Pointer[1] 是一種用于定位 JSON(JavaScript Object Notation)文檔中特定值的簡單而強(qiáng)大的方法。它通過使用斜杠 / 分隔符來指示 JSON 對(duì)象的層級(jí)結(jié)構(gòu),以確切地標(biāo)識(shí)所需值的位置。

為什么使用 JSON Pointer

當(dāng)處理大型或復(fù)雜的 JSON 數(shù)據(jù)結(jié)構(gòu)時(shí),定位特定值可能會(huì)變得非常麻煩。使用 JSON Pointer 可以讓你以一種簡單而準(zhǔn)確的方式指定所需值的位置,而不需要編寫復(fù)雜的代碼來遍歷整個(gè) JSON 結(jié)構(gòu)。這極大地簡化了 JSON 數(shù)據(jù)的定位和操作過程。

此外,JSON Pointer 還具有以下優(yōu)點(diǎn):

  • 通用性:JSON Pointer 是一種通用的標(biāo)準(zhǔn),因此可以在各種編程語言和平臺(tái)上使用。這種通用性使得 JSON Pointer 成為跨平臺(tái)開發(fā)和數(shù)據(jù)交換的理想選擇。
  • 效率:由于 JSON Pointer 可以直接定位到所需值,因此它在處理大型 JSON 數(shù)據(jù)時(shí)效率很高。相比于傳統(tǒng)的逐層遍歷搜索方式,JSON Pointer 能夠更快速地找到目標(biāo)值。
  • 簡單易懂:JSON Pointer 使用類似文件路徑的語法,因此非常直觀和易于理解。它的語法簡潔清晰,使得使用者可以輕松地理解和使用它。
  • 精確定位:JSON Pointer 允許你以非常準(zhǔn)確的方式指定 JSON 對(duì)象中的值,而無需關(guān)心其周圍的結(jié)構(gòu)。這意味著你可以專注于所需值的確切位置,而不必?fù)?dān)心其他內(nèi)容。

如何使用 JSON Pointer

很多常見的開發(fā)語言,都實(shí)現(xiàn)了 JSON Pointer 規(guī)范。在 Node.js 環(huán)境,我們可以使用 jsonpointer[2] 這個(gè)庫。

首先,使用 npm 或 pnpm 來安裝 jsonpointer:

npm install jsonpointer
or 
pnpm add jsonpointer

成功安裝 jsonpointer 庫之后,我們就可以利用它提供的 API 來快速的定位和操作 JSON 對(duì)象。

1.獲取指定路徑的屬性值

JSON Pointer 使用斜杠 / 分隔符來指示 JSON 對(duì)象的層級(jí)結(jié)構(gòu),如果指定的路徑不存在,則會(huì)返回 undefined。

const jsonpointer = require("jsonpointer");
let obj = {
  foo: 1,
  bar: { baz: 2 },
  qux: [3, 4, 5],
  zoo: {
    e: [{ a: 3 }, { b: 4 }, { c: 5 }],
  },
};

jsonpointer.get(obj, "/foo"); // returns 1
jsonpointer.get(obj, "/bar/baz"); // returns 2

jsonpointer.get(obj, "/quo"); // returns undefined

2.獲取數(shù)組對(duì)象指定位置的值

若要訪問指定位置的數(shù)組元素,則需要在 / 分隔符后面添加該元素的索引。

jsonpointer.get(obj, "/qux/0"); // returns 3
jsonpointer.get(obj, "/qux/1"); // returns 4
jsonpointer.get(obj, "/qux/2"); // returns 5

如果數(shù)組元素也是對(duì)象的話,我們只需按照屬性的層級(jí)結(jié)構(gòu)進(jìn)行訪問路徑即可。

jsonpointer.get(obj, "/zoo/e/0/a"); // returns 3
jsonpointer.get(obj, "/zoo/e/1/b"); // returns 4
jsonpointer.get(obj, "/zoo/e/2/c"); // returns 5

除了,獲取 JSON 對(duì)象的值之外,通過使用 jsonpointer 這個(gè)庫提供的 set 方法,我們也可以設(shè)置指定路徑的值。

3.設(shè)置指定路徑的屬性值

JSON Pointer 提供了一種往數(shù)組中插入新元素的便捷語法,即在 / 路徑后添加 - 符號(hào):

// sets obj.foo = 6;
jsonpointer.set(obj, "/foo", 6); 
// sets obj.qux = [3, 4, 5, 6]
jsonpointer.set(obj, "/qux/-", 6); 

// set zoo.e = [{"a":3},{"b":4},{"c":5},{"d":6}]
jsonpointer.set(obj, "/zoo/e/-", { d: 6 });

除了上面介紹的 set 和 get 方法之外,jsonpointer 這個(gè)庫還提供了一個(gè) compile 方法,該方法會(huì)返回一個(gè)新的 JSON Pointer 對(duì)象,讓我們更方便地訪問 JSON 對(duì)象特定路徑的屬性。

const pointer = jsonpointer.compile("/foo");
pointer.get(obj); // returns 6
pointer.set(obj, 1); // sets obj.foo = 1

JSON Pointer 在 LangchainJS 中的應(yīng)用

在 LangchainJS 的 JSONLoader[3] 中,也用到了 jsonpointer 這個(gè)庫。使用該庫的主要目的是為了能快速從 JSON 對(duì)象中,提取用戶想要的數(shù)據(jù)。

使用示例

example.json

{
  "1": {
    "body": "BD 2023 SUMMER",
    "from": "LinkedIn Job",
    "labels": ["IMPORTANT", "CATEGORY_UPDATES", "INBOX"]
  },
  "2": {
    "body": "Intern, Treasury and other roles are available",
    "from": "LinkedIn Job2",
    "labels": ["IMPORTANT"],
    "other": {
      "name": "plop",
      "surname": "bob"
    }
  }
}

JSONLoader

export declare class JSONLoader extends TextLoader {
    pointers: string[];
    constructor(filePathOrBlob: string | Blob, pointers?: string | string[]);
}

假設(shè)我們只想要提取 from 和 surname 的信息:

import { JSONLoader } from "langchain/document_loaders/fs/json";

const loader = new JSONLoader(
  "src/document_loaders/example_data/example.json",
  ["/from", "/surname"]
);

const docs = await loader.load();

通過設(shè)置 pointers 參數(shù)的值為 ["/from", "/surname"],我們就實(shí)現(xiàn)了快速提取 JSON 對(duì)象中想要的數(shù)據(jù)。

[
  Document {
    pageContent: 'LinkedIn Job',
    metadata: { source: './src/json/example.json', line: 1 }
  },
  Document {
    pageContent: 'LinkedIn Job2',
    metadata: { source: './src/json/example.json', line: 2 }
  },
  Document {
    pageContent: 'bob',
    metadata: { source: './src/json/example.json', line: 3 }
  }
]

參考資料

[1]JSON Pointer: https://datatracker.ietf.org/doc/html/rfc6901

[2]jsonpointer: https://www.npmjs.com/package/jsonpointer

[3]JSONLoader: https://js.langchain.com/docs/modules/data_connection/document_loaders/json

責(zé)任編輯:武曉燕 來源: 全棧修仙之路
相關(guān)推薦

2021-07-28 06:10:47

拖拽設(shè)計(jì)器 transmat

2020-11-16 13:38:31

PostMessage

2021-11-10 06:38:01

Python鏈?zhǔn)?/a>操作

2022-07-04 08:16:43

JSONJSON庫對(duì)象

2021-09-05 07:55:37

前端Emoji 表情

2021-10-29 07:49:22

Spring事務(wù)管理

2012-07-13 11:32:16

網(wǎng)絡(luò)出口

2019-02-26 14:43:50

http狀態(tài)碼前端

2020-09-14 11:26:54

BinlogCanal數(shù)據(jù)庫

2024-08-02 08:38:20

Controller接口地址

2024-02-04 12:21:59

AI模型

2021-03-08 07:46:53

Git開源控制系統(tǒng)

2020-09-29 06:45:49

JDK

2020-08-14 08:19:25

Shell命令行數(shù)據(jù)

2023-11-16 20:37:01

2022-05-11 09:51:10

云計(jì)算公共云

2021-08-05 18:34:55

IntelliJ ID高效

2010-03-03 15:06:52

Android 游戲開

2020-12-15 08:05:40

路由器服務(wù)器網(wǎng)絡(luò)層

2021-07-28 06:51:08

Nacos代理模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)