1
0
mirror of https://github.com/fluencelabs/jsonpath synced 2025-03-16 15:30:50 +00:00
2019-06-11 18:56:27 +09:00
..
2019-06-11 18:56:27 +09:00
2019-04-13 22:39:48 +09:00
2019-06-11 18:56:27 +09:00
2019-06-11 18:56:27 +09:00
2019-05-16 10:03:11 +09:00

jsonpath-wasm

Build Status

It is Webassembly version of jsonpath_lib that is JsonPath engine written in Rust.

APIs

jsonpath.Selector

The selectTo function is deprecated since 0.1.3. please use the selectAs function instead.

let jsonpath = require('jsonpath-wasm');

let jsonObj = {
    "school": {
        "friends": [
            {"name": "친구1", "age": 20},
            {"name": "친구2", "age": 20}
        ]
    },
    "friends": [
        {"name": "친구3", "age": 30},
        {"name": "친구4"}
    ]
};

let selector = new jsonpath.Selector();
selector.value(jsonObj);

{
    selector.path('$..[?(@.age >= 30)]');
    let jsonObj = selector.selectAs();
    let resultObj = [{"name": "친구3", "age": 30}];
    console.log(JSON.stringify(jsonObj) === JSON.stringify(resultObj));
}

{
    selector.path('$..[?(@.age == 20)]');
    let jsonObj = selector.selectAs();
    let resultObj = [{"name": "친구1", "age": 20}, {"name": "친구2", "age": 20}];
    console.log(JSON.stringify(jsonObj) === JSON.stringify(resultObj));
}

{
    selector.value({"friends": [ {"name": "친구5", "age": 20} ]});
    let jsonObj = selector.selectAs();
    let resultObj = [{"name": "친구5", "age": 20}];
    console.log(JSON.stringify(jsonObj) === JSON.stringify(resultObj));
}

{
    selector.value(jsonObj);
    selector.map(function(v) {
        let f1 = v[0];
        f1.age = 30;
        return v;
    });
    let resultObj1 = [{"name": "친구1", "age": 30}, {"name": "친구2", "age": 20}];
    console.log(JSON.stringify(selector.get()) === JSON.stringify(resultObj1));

    selector.path('$..[?(@.age == 20)]');
    let jsonObj1 = selector.selectAs();
    let resultObj2 = [{"name": "친구2", "age": 20}];
    console.log(JSON.stringify(jsonObj1) === JSON.stringify(resultObj2));
}

jsonpath.select(json: string|object, jsonpath: string)

let jsonObj = {
    "school": {
        "friends": [
            {"name": "친구1", "age": 20},
            {"name": "친구2", "age": 20}
        ]
    },
    "friends": [
        {"name": "친구3", "age": 30},
        {"name": "친구4"}
    ]
};

let ret = [
    {"name": "친구3", "age": 30},
    {"name": "친구1", "age": 20}
];


let selectAsString = jsonpath.select(JSON.stringify(jsonObj), '$..friends[0]');
let selectAsObj = jsonpath.select(jsonObj, '$..friends[0]');

console.log(
    JSON.stringify(ret) == JSON.stringify(selectAsString),
    JSON.stringify(ret) == JSON.stringify(selectAsObj)
);

// => true, true

jsonpath.compile(jsonpath: string)

let template = jsonpath.compile('$..friends[0]');

let jsonObj = {
    "school": {
        "friends": [
            {"name": "친구1", "age": 20},
            {"name": "친구2", "age": 20}
        ]
    },
    "friends": [
        {"name": "친구3", "age": 30},
        {"name": "친구4"}
    ]
};

let ret = [
    {"name": "친구3", "age": 30},
    {"name": "친구1", "age": 20}
];

let selectAsString = template(JSON.stringify(jsonObj));
let selectAsObj = template(jsonObj);

console.log(
    JSON.stringify(ret) == JSON.stringify(selectAsString),
    JSON.stringify(ret) == JSON.stringify(selectAsObj)
);

// => true, true

let jsonObj2 = {
    "school": {
        "friends": [
            {"name": "Millicent Norman"},
            {"name": "Vincent Cannon"}
        ]
    },
    "friends": [ {"age": 30}, {"age": 40} ]
};

let ret2 = [
    {"age": 30},
    {"name": "Millicent Norman"}
];

let selectAsString2 = template(JSON.stringify(jsonObj2));
let selectAsObj2 = template(jsonObj2);

console.log(
        JSON.stringify(ret2) == JSON.stringify(selectAsString2),
        JSON.stringify(ret2) == JSON.stringify(selectAsObj2)
);

// => true, true

jsonpath.selector(json: string|object)

let jsonObj = {
    "school": {
        "friends": [
            {"name": "친구1", "age": 20},
            {"name": "친구2", "age": 20}
        ]
    },
    "friends": [
        {"name": "친구3", "age": 30},
        {"name": "친구4"}
    ]
};

let ret1 = [
    {"name": "친구3", "age": 30},
    {"name": "친구1", "age": 20}
];

let ret2 = [
    {"name": "친구4"},
    {"name": "친구2", "age": 20}
];

let selector = jsonpath.selector(jsonObj);
// or as json string 
// let selector = jsonpath.selector(JSON.stringify(jsonObj));

let select1 = selector('$..friends[0]');
let select2 = selector('$..friends[1]');

console.log(
    JSON.stringify(ret1) == JSON.stringify(select1),
    JSON.stringify(ret2) == JSON.stringify(select2)
);

// => true, true