Black.Beard.Jslt
1.0.123
See the version list below for details.
dotnet add package Black.Beard.Jslt --version 1.0.123
NuGet\Install-Package Black.Beard.Jslt -Version 1.0.123
<PackageReference Include="Black.Beard.Jslt" Version="1.0.123" />
paket add Black.Beard.Jslt --version 1.0.123
#r "nuget: Black.Beard.Jslt, 1.0.123"
// Install Black.Beard.Jslt as a Cake Addin #addin nuget:?package=Black.Beard.Jslt&version=1.0.123 // Install Black.Beard.Jslt as a Cake Tool #tool nuget:?package=Black.Beard.Jslt&version=1.0.123
jslt (json Stylesheet Language Transformations)
Implementation of jslt language in DOTNET. Use a template for transform Json To another json. Consider the following template. note this template is a json that describe the structure of the target json. If the template is empty, the process return the initial source json.
Case 1
For the template document
{ "n" : "name1" }
The result will be.
{ "name" : "name1" }
In this case the result is exactly what you have in the template, because you have not used any operations of transformation.
Case 2
In this case, the value is a json path. Json path is a query language for JSON, similar to XPath for XML. The implementation of JsonPath is did by newtonsoft. [SelectToken] by the method (https://www.newtonsoft.com/json/help/html/SelectToken.htm).
{ "name" : "$.n" }
The result will be an object with a property named "name" and the value will be the properties "n" at the root of the source json. The value '$..n' is a valid json path implemented by newtonsoft.
Case 3
you can use functions for extend the process.
Like that
"property name": .mymethod( "$.property", arg2, ...)
'mymethod' is the name of the service you want to call. The sdk provide another keys like sum or distinct. the list is available here. If you write your own method, you must register the methods before in the configuration. the arguments must be any json part (see the directives for register your extension).
A sample for call the method
// Source
{ "prices": [{"n" : 1}, {"n" : 2}, {"n" : 3}] }
// Template
{ "prices": sum("$..n") } // sum method is a service registered in the services list.
// Result
{ "prices": 6 }
Note
if the string start with '$' the value is automatically convert in json path. if the method expect a string you must cast the value.
{ "prices": method("$..n" @string) }
cast
for cast a value you must use this syntax '@type'
- @uri
- @time
- @datetime
- @string
- @guid
- @integer
- @decimal
Custom services
the customs services are used to extend the feature of the Sdk. You can create your own customs services.
That is the skeleton
[JsltExtensionMethod("method1")] // name of the method in the template
public static JToken ExtendTheSdkMethod1(RuntimeContext ctx)
{
return new JValue("result");
}
I give you the method loadjson like sample
[JsltExtensionMethod("loadjson")] // name of the method in the template
[JsltExtensionMethodParameter("sourcePath", "directory source path")] // Provide intellisense in the code editor.
public static JToken ExecuteLoadSource(RuntimeContext ctx, string sourcePath)
{
// Use the system for resolve the file with path relative to the current template script.
var file = ctx.Configuration.ResolveFile(sourcePath);
if (file.Exists)
return file.FullName
.LoadContentFromFile()
.ConvertToJson();
else
{
ctx.Diagnostics.AddDiagnostic(Parser.SeverityEnum.Warning, string.Empty, new Parser.TokenLocation(), "file.FullName", $"file '{file.FullName}' not found");
}
return JValue.CreateNull();
}
Note, that you can add any parameter.
Disclaimer
If you use a easy treatement, the template is a valid json structure. If you want do more the json syntax become verbose. It is for this reason I have extended the json syntax.
when
the method when is very usefull. it is a switch case.
{
"prices": when("$.prop1" @string)
{
"case1": { /* structure to inject if the value of '$.prop1' is equal to 'case1' */ }
}
}
How to use
Command line
You can use the command line json.exe. Documentation of json cli.
By code
// Intialization of the configuration
var configuration = new TranformJsonAstConfiguration()
{
OutputPath = Environment.CurrentDirectory,
};
// add a custom service : Note the services in the sdk are already registered
configuration.Services.ServiceDiscovery.AddService("serviceName", typeof(service));
// if you want to implement your service : use and implemente the interface Bb.Json.Jslt.Services.ITransformJsonService
TemplateTransformProvider Templateprovider = new TemplateTransformProvider(configuration);
//Build the template translator
StringBuilder sbPayloadTemplate = new StringBuilder(@"payload template");
JsltTemplate template = Templateprovider.GetTemplate(sbPayloadTemplate, false, "name of the template file");
// now the source json
// from text
var source1 = SourceJson.GetFromText("payload");
// from file
var source2 = SourceJson.GetFromFile("filename");
// from json
var source3 = SourceJson.GetFromJson(new JObject());
// Create the sources object with the primary source of data
var src = new Sources(source1);
// you can add additional source of datas
src.Add(source2);
src.Add(source3);
RuntimeContext ctx = template.Transform(src);
var result = ctx.TokenResult;
JSONPath notation
A JSONPath expression specifies a path to an element (or a set of elements) in a JSON structure. Paths can use the dot notation: The implementation is provided by newtonsoft.
Custom services embedded in the Sdk
Directives of compilation
You can manage any directives
Sample
"$directives":
{
"culture":"FR-fr",
"assemblies":["assembly name referenced in the gac"],
"functions":["path of the csharp file"],
"packages":["path of the package on nuget.org"],
"imports": ["path of the assembly flie"],
"output":
{
"filter": "$.datas", // It is json path for filter just one part of the output document
"Mode": to_block() // Behavior the output serialization
}
}
culture
Set the culture of the process. The Culture specifies a unique name for each culture, based on RFC 4646. The name is a combination of an ISO 639 two-letter lowercase culture code associated with a language and an ISO 3166 two-letter uppercase subculture code associated with a country or region. In addition, for apps that target .NET Framework 4 or later and are running under Windows 10 or later, culture names that correspond to valid BCP-47 language tags are supported.
imports
Take a list of assemblies files. the path is relative to the json template file.
assemblies
Take a list of assemblies name referenced in the GAC.
Functions
Take a list of c# source code file. the path is relative to the json template file. The file contains Csharp source code like this class see the DistinctService like sample
Packages
You can use
"$directives":
{
"packages": ["path of the assembly file on nuget"],
}
// or
"$directives":
{
"packages": [ ["https://www.nuget.org/api/v2/package/", "path of the assembly file"] ],
}
output
the output manage the serialization
Filter
Select just a part of the output document
Mode
Mode is a function that serialize the output document.
to_block()
If the output is an array all lines are serialized (one object by line)
to_json(bool indented, bool ignoreNullAndEmptyValues)
serialize the output in classical serialization
You can write your own serialize service. The returned type must be a StringBuilder
[JsltExtensionMethod("to_block", ForOutput = true)]
public static StringBuilder ExecuteToBlock(RuntimeContext ctx)
{
var source = ctx.TokenResult;
var result = new StringBuilder();
if (source is JObject o)
result.AppendLine(o.ToString(Newtonsoft.Json.Formatting.None));
else if (source is JArray a)
foreach (var item in a)
result.AppendLine(item.ToString(Newtonsoft.Json.Formatting.None));
return result;
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | 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 was computed. 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. |
-
net6.0
- Antlr4.Runtime.Standard (>= 4.9.3)
- Black.Beard.Helpers.ContentLoaders (>= 1.0.5)
- Black.Beard.Roslyn (>= 1.0.2)
- Newtonsoft.Json (>= 13.0.1)
- SharpCompress (>= 0.30.1)
- System.CodeDom (>= 6.0.0)
- Ude.NetStandard (>= 1.2.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Black.Beard.Jslt:
Package | Downloads |
---|---|
Black.Beard.Jslt.Services
support extended method(loading excel, html, multicsv, sql). |
|
Black.Beard.Jslt.Symbol
Implementation of jslt language in DOTNET. Use a template for transform Json document to another json document. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.374 | 87 | 12/7/2024 |
1.0.373 | 87 | 12/7/2024 |
1.0.372 | 93 | 11/20/2024 |
1.0.371 | 74 | 11/20/2024 |
1.0.370 | 79 | 11/16/2024 |
1.0.369 | 77 | 11/16/2024 |
1.0.368 | 94 | 11/14/2024 |
1.0.367 | 80 | 11/14/2024 |
1.0.366 | 88 | 11/13/2024 |
1.0.365 | 76 | 11/13/2024 |
1.0.364 | 88 | 11/12/2024 |
1.0.363 | 88 | 11/12/2024 |
1.0.362 | 96 | 11/11/2024 |
1.0.361 | 90 | 11/11/2024 |
1.0.360 | 88 | 11/11/2024 |
1.0.359 | 89 | 11/11/2024 |
1.0.358 | 99 | 11/11/2024 |
1.0.357 | 87 | 11/11/2024 |
1.0.356 | 90 | 11/10/2024 |
1.0.355 | 86 | 11/10/2024 |
1.0.354 | 92 | 10/28/2024 |
1.0.353 | 84 | 10/28/2024 |
1.0.352 | 81 | 10/28/2024 |
1.0.351 | 80 | 10/28/2024 |
1.0.350 | 117 | 5/2/2024 |
1.0.349 | 100 | 5/2/2024 |
1.0.348 | 108 | 5/2/2024 |
1.0.347 | 87 | 5/2/2024 |
1.0.346 | 138 | 4/7/2024 |
1.0.345 | 126 | 4/7/2024 |
1.0.344 | 115 | 4/5/2024 |
1.0.343 | 119 | 4/5/2024 |
1.0.342 | 132 | 4/5/2024 |
1.0.341 | 115 | 4/5/2024 |
1.0.340 | 116 | 4/4/2024 |
1.0.339 | 133 | 4/4/2024 |
1.0.338 | 127 | 4/3/2024 |
1.0.337 | 140 | 4/3/2024 |
1.0.336 | 129 | 4/3/2024 |
1.0.335 | 103 | 4/3/2024 |
1.0.334 | 118 | 4/2/2024 |
1.0.333 | 110 | 4/2/2024 |
1.0.332 | 119 | 4/2/2024 |
1.0.331 | 126 | 4/2/2024 |
1.0.330 | 121 | 4/2/2024 |
1.0.329 | 111 | 4/2/2024 |
1.0.328 | 134 | 4/1/2024 |
1.0.327 | 114 | 4/1/2024 |
1.0.325 | 113 | 4/1/2024 |
1.0.324 | 126 | 4/1/2024 |
1.0.323 | 120 | 4/1/2024 |
1.0.322 | 110 | 3/31/2024 |
1.0.321 | 122 | 3/31/2024 |
1.0.319 | 124 | 3/31/2024 |
1.0.318 | 114 | 3/31/2024 |
1.0.317 | 267 | 3/19/2024 |
1.0.316 | 118 | 3/19/2024 |
1.0.315 | 215 | 3/15/2024 |
1.0.314 | 137 | 3/15/2024 |
1.0.313 | 155 | 3/13/2024 |
1.0.312 | 137 | 3/13/2024 |
1.0.311 | 131 | 3/13/2024 |
1.0.310 | 126 | 3/13/2024 |
1.0.309 | 170 | 3/12/2024 |
1.0.308 | 185 | 3/12/2024 |
1.0.306 | 299 | 3/5/2024 |
1.0.305 | 125 | 3/5/2024 |
1.0.304 | 147 | 3/4/2024 |
1.0.303 | 128 | 3/4/2024 |
1.0.302 | 132 | 3/4/2024 |
1.0.301 | 127 | 3/4/2024 |
1.0.300 | 156 | 3/3/2024 |
1.0.299 | 117 | 3/3/2024 |
1.0.298 | 286 | 2/26/2024 |
1.0.297 | 129 | 2/26/2024 |
1.0.296 | 125 | 2/25/2024 |
1.0.295 | 126 | 2/25/2024 |
1.0.294 | 135 | 2/24/2024 |
1.0.293 | 123 | 2/24/2024 |
1.0.292 | 119 | 2/24/2024 |
1.0.291 | 130 | 2/24/2024 |
1.0.290 | 121 | 2/24/2024 |
1.0.289 | 122 | 2/24/2024 |
1.0.288 | 213 | 2/21/2024 |
1.0.287 | 133 | 2/21/2024 |
1.0.286 | 1,830 | 12/12/2023 |
1.0.285 | 132 | 12/12/2023 |
1.0.259 | 1,550 | 10/17/2023 |
1.0.258 | 134 | 10/17/2023 |
1.0.257 | 243 | 10/13/2023 |
1.0.256 | 143 | 10/13/2023 |
1.0.255 | 239 | 10/10/2023 |
1.0.254 | 152 | 10/10/2023 |
1.0.253 | 191 | 9/19/2023 |
1.0.252 | 139 | 9/19/2023 |
1.0.251 | 163 | 9/13/2023 |
1.0.250 | 154 | 9/13/2023 |
1.0.245 | 186 | 7/26/2023 |
1.0.244 | 171 | 7/26/2023 |
1.0.243 | 188 | 7/19/2023 |
1.0.242 | 179 | 7/19/2023 |
1.0.241 | 156 | 7/11/2023 |
1.0.240 | 168 | 7/11/2023 |
1.0.239 | 167 | 7/7/2023 |
1.0.238 | 155 | 7/7/2023 |
1.0.237 | 182 | 7/6/2023 |
1.0.236 | 164 | 7/6/2023 |
1.0.235 | 157 | 7/6/2023 |
1.0.234 | 168 | 7/6/2023 |
1.0.232 | 158 | 7/5/2023 |
1.0.231 | 169 | 7/5/2023 |
1.0.230 | 184 | 7/5/2023 |
1.0.229 | 176 | 7/5/2023 |
1.0.228 | 164 | 7/5/2023 |
1.0.227 | 170 | 7/5/2023 |
1.0.226 | 171 | 7/4/2023 |
1.0.225 | 161 | 7/4/2023 |
1.0.224 | 193 | 7/3/2023 |
1.0.223 | 162 | 7/3/2023 |
1.0.222 | 165 | 6/30/2023 |
1.0.221 | 147 | 6/30/2023 |
1.0.220 | 170 | 6/30/2023 |
1.0.219 | 158 | 6/30/2023 |
1.0.218 | 194 | 6/17/2023 |
1.0.217 | 170 | 6/17/2023 |
1.0.214 | 172 | 6/6/2023 |
1.0.213 | 160 | 6/6/2023 |
1.0.212 | 162 | 6/6/2023 |
1.0.211 | 158 | 6/6/2023 |
1.0.206 | 156 | 6/5/2023 |
1.0.205 | 156 | 6/5/2023 |
1.0.204 | 179 | 6/2/2023 |
1.0.203 | 146 | 6/2/2023 |
1.0.202 | 172 | 6/2/2023 |
1.0.201 | 167 | 6/2/2023 |
1.0.190 | 585 | 5/27/2022 |
1.0.189 | 533 | 5/27/2022 |
1.0.188 | 546 | 5/23/2022 |
1.0.187 | 554 | 5/23/2022 |
1.0.186 | 513 | 5/18/2022 |
1.0.185 | 515 | 5/18/2022 |
1.0.184 | 556 | 5/18/2022 |
1.0.183 | 561 | 5/18/2022 |
1.0.182 | 561 | 5/17/2022 |
1.0.181 | 550 | 5/17/2022 |
1.0.180 | 542 | 5/11/2022 |
1.0.179 | 552 | 5/11/2022 |
1.0.178 | 565 | 5/6/2022 |
1.0.177 | 566 | 5/6/2022 |
1.0.176 | 594 | 4/2/2022 |
1.0.175 | 573 | 4/2/2022 |
1.0.174 | 561 | 3/24/2022 |
1.0.173 | 550 | 3/24/2022 |
1.0.172 | 510 | 3/23/2022 |
1.0.171 | 542 | 3/23/2022 |
1.0.170 | 534 | 3/23/2022 |
1.0.169 | 532 | 3/23/2022 |
1.0.168 | 572 | 3/21/2022 |
1.0.167 | 560 | 3/21/2022 |
1.0.166 | 562 | 3/19/2022 |
1.0.165 | 581 | 3/19/2022 |
1.0.164 | 550 | 3/17/2022 |
1.0.163 | 554 | 3/17/2022 |
1.0.162 | 551 | 3/17/2022 |
1.0.161 | 568 | 3/17/2022 |
1.0.160 | 549 | 3/16/2022 |
1.0.159 | 572 | 3/16/2022 |
1.0.158 | 575 | 3/7/2022 |
1.0.157 | 573 | 3/7/2022 |
1.0.156 | 562 | 3/6/2022 |
1.0.155 | 563 | 3/6/2022 |
1.0.154 | 574 | 3/6/2022 |
1.0.153 | 574 | 3/6/2022 |
1.0.152 | 569 | 3/6/2022 |
1.0.151 | 574 | 3/6/2022 |
1.0.150 | 569 | 3/6/2022 |
1.0.149 | 589 | 3/6/2022 |
1.0.148 | 587 | 3/5/2022 |
1.0.147 | 577 | 3/5/2022 |
1.0.146 | 531 | 3/5/2022 |
1.0.145 | 682 | 3/5/2022 |
1.0.144 | 673 | 3/5/2022 |
1.0.143 | 688 | 3/5/2022 |
1.0.142 | 671 | 3/5/2022 |
1.0.140 | 572 | 3/5/2022 |
1.0.139 | 553 | 3/5/2022 |
1.0.137 | 558 | 3/5/2022 |
1.0.136 | 540 | 3/5/2022 |
1.0.135 | 430 | 3/5/2022 |
1.0.134 | 432 | 3/5/2022 |
1.0.133 | 566 | 3/5/2022 |
1.0.132 | 571 | 3/5/2022 |
1.0.131 | 555 | 3/5/2022 |
1.0.130 | 580 | 3/5/2022 |
1.0.128 | 557 | 3/5/2022 |
1.0.126 | 432 | 3/5/2022 |
1.0.125 | 457 | 3/4/2022 |
1.0.124 | 453 | 3/4/2022 |
1.0.123 | 456 | 3/4/2022 |
1.0.122 | 463 | 3/4/2022 |
1.0.120 | 463 | 3/4/2022 |
1.0.119 | 451 | 3/4/2022 |
1.0.118 | 440 | 3/3/2022 |
1.0.117 | 433 | 3/3/2022 |
1.0.116 | 431 | 3/3/2022 |
1.0.115 | 454 | 3/3/2022 |
1.0.114 | 463 | 2/21/2022 |
1.0.113 | 438 | 2/21/2022 |
1.0.112 | 474 | 2/19/2022 |
1.0.111 | 435 | 2/18/2022 |
1.0.110 | 448 | 2/18/2022 |
1.0.109 | 444 | 2/18/2022 |
1.0.107 | 439 | 2/17/2022 |
1.0.106 | 1,030 | 2/17/2022 |
1.0.105 | 480 | 1/18/2022 |
1.0.104 | 472 | 1/18/2022 |
1.0.103 | 311 | 12/20/2021 |
1.0.102 | 315 | 12/20/2021 |
1.0.101 | 299 | 12/20/2021 |
1.0.100 | 294 | 12/20/2021 |
1.0.99 | 281 | 12/20/2021 |
1.0.98 | 266 | 12/20/2021 |
1.0.96 | 299 | 12/18/2021 |
1.0.94 | 343 | 12/18/2021 |
1.0.93 | 316 | 12/18/2021 |
1.0.92 | 333 | 12/18/2021 |
1.0.0 | 452 | 3/5/2022 |