Devlooped.JQ
1.7.1.8
Prefix Reserved
dotnet add package Devlooped.JQ --version 1.7.1.8
NuGet\Install-Package Devlooped.JQ -Version 1.7.1.8
<PackageReference Include="Devlooped.JQ" Version="1.7.1.8" />
<PackageVersion Include="Devlooped.JQ" Version="1.7.1.8" />
<PackageReference Include="Devlooped.JQ" />
paket add Devlooped.JQ --version 1.7.1.8
#r "nuget: Devlooped.JQ, 1.7.1.8"
#addin nuget:?package=Devlooped.JQ&version=1.7.1.8
#tool nuget:?package=Devlooped.JQ&version=1.7.1.8
Packs the jq binaries for easy execution from dotnet applications running on Linux (AMD64 and ARM64), macOS (AMD64 and ARM64) and Windows (AMD64 and i386).
When JsonPath falls short, jq
is the obvious next step in flexibility
and power for JSON manipulation.
jq is like sed for JSON data - you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text.
Learn more about jq
at https://jqlang.github.io/jq/.
Usage
var name = await JQ.ExecuteAsync(
"""
{
"name": "John",
"age": 30
}
""",
".name"));
The JQ.Path
static property provides the full path to the jq binary that's appropriate
for the current OS and architecture so you can execute it directly if needed.
Examples
The following is a real-world scenario where WhatsApp Cloud API messages are converted into clean polymorphic JSON for nice OO deserialization via System.Text.Json.
Rather than navigating deep into the JSON structure, we can use jq
to transform the payload
into what we expect for deserialization of a text message:
{
"id": "wamid.HBgNMTIwM==",
"timestamp": 1678902345,
"to": {
"id": "792401583610927",
"number": "12025550123"
},
"from": {
"name": "Mlx",
"number": "12029874563"
},
"content": {
"$type": "text",
"text": "😊"
}
}
The original JSON looks like the following:
{
"object": "whatsapp_business_account",
"entry": [
{
"id": "813920475102346",
"changes": [
{
"value": {
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "12025550123",
"phone_number_id": "792401583610927"
},
"contacts": [
{
"profile": { "name": "Mlx" },
"wa_id": "12029874563"
}
],
"messages": [
{
"from": "12029874563",
"id": "wamid.HBgNMTIwM==",
"timestamp": "1678902345",
"text": { "body": "\ud83d\ude0a" },
"type": "text"
}
]
},
"field": "messages"
}
]
}
]
}
The following JQ query turns the latter info the former:
.entry[].changes[].value.metadata as $phone |
.entry[].changes[].value.contacts[] as $user |
.entry[].changes[].value.messages[] |
{
id: .id,
timestamp: .timestamp | tonumber,
to: {
id: $phone.phone_number_id,
number: $phone.display_phone_number
},
from: {
name: $user.profile.name,
number: $user.wa_id
},
content: {
"$type": "text",
text: .text.body
}
}
This allows you to focus your C# code into the actual object model you want to work with, rather than the one imposed by the JSON format of external APIs.
See this code in action at Devlooped.WhatsApp.
Sponsors
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Devlooped.JQ:
Package | Downloads |
---|---|
Devlooped.WhatsApp
WhatsApp agents for Azure Functions |
GitHub repositories
This package is not used by any popular GitHub repositories.