简体   繁体   中英

How can I parse through an array of JSON objects with a SQL query?

I am trying to create a SQL query to gather information from a column in a database called "CarOptions". This column is an array that contains 1 or more JSON objects. Below is an example of the array.

I want to only grab the values of the name and the price. Could any provide me a query that can formulate a column with the name and price so that it would look like the example below or any readable format?

"Clear Guard 89500, Tint 0"

[
    {
        "id": 5,
        "name": "Clear Guard",
        "type": "ANY",
        "grouping": "PREFER",
        "price": 89500,
        "oemOffering": false,
        "learnMoreUrl": null,
        "pricePercent": null,
        "optionGroupId": 2,
        "percentSource": null
    },
    {
        "id": 119600,
        "name": "Tint (Lifetime Warranty)",
        "type": "NEW",
        "grouping": "PREFER",
        "price": 0,
        "oemOffering": false,
        "learnMoreUrl": null,
        "pricePercent": null,
        "optionGroupId": 18,
        "percentSource": null
    }
]

you can use openJson to pull the data out. Note you don't state your database, this is for SqlServer.

A very quick hacky example:

declare @json varchar(max)='[ { "id": 5, "name": "Clear Guard", "type": "ANY", "grouping": "PREFER", "price": 89500, "oemOffering": false, "learnMoreUrl": null, "pricePercent": null, "optionGroupId": 2, "percentSource": null }, { "id": 119600, "name": "Tint (Lifetime Warranty)", "type": "NEW", "grouping": "PREFER", "price": 0, "oemOffering": false, "learnMoreUrl": null, "pricePercent": null, "optionGroupId": 18, "percentSource": null } ]'

select j.[key] Id, x.[key], x.[value]
from OpenJson(@json)j
outer apply (
    select [key],[value]
    from OpenJson(value)
    where [key] in ('name','price')
)x


Id    key       value
---- ---------- -------------------------
0    name       Clear Guard
0    price      89500
1    name       Tint (Lifetime Warranty)
1    price      0

(4 rows affected)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM