Black.Beard.Jslt 1.0.100

There is a newer version of this package available.
See the version list below for details.
dotnet add package Black.Beard.Jslt --version 1.0.100
                    
NuGet\Install-Package Black.Beard.Jslt -Version 1.0.100
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Black.Beard.Jslt" Version="1.0.100" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Black.Beard.Jslt" Version="1.0.100" />
                    
Directory.Packages.props
<PackageReference Include="Black.Beard.Jslt" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Black.Beard.Jslt --version 1.0.100
                    
#r "nuget: Black.Beard.Jslt, 1.0.100"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=Black.Beard.Jslt&version=1.0.100
                    
Install as a Cake Addin
#tool nuget:?package=Black.Beard.Jslt&version=1.0.100
                    
Install as a Cake Tool

jslt (json Stylesheet Language Transformations)

Build status

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.

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)
{

    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.

Documentation of json path

Custom services embedded in the Sdk

Documentation of the Services

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"]
}

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"] ],
}

Product 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.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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 135 12/7/2024
1.0.373 125 12/7/2024
1.0.372 124 11/20/2024
1.0.371 118 11/20/2024
1.0.370 112 11/16/2024
1.0.369 106 11/16/2024
1.0.368 125 11/14/2024
1.0.367 111 11/14/2024
1.0.366 120 11/13/2024
1.0.365 107 11/13/2024
1.0.364 121 11/12/2024
1.0.363 122 11/12/2024
1.0.362 124 11/11/2024
1.0.361 119 11/11/2024
1.0.360 118 11/11/2024
1.0.359 117 11/11/2024
1.0.358 129 11/11/2024
1.0.357 124 11/11/2024
1.0.356 119 11/10/2024
1.0.355 114 11/10/2024
1.0.354 123 10/28/2024
1.0.353 111 10/28/2024
1.0.352 108 10/28/2024
1.0.351 114 10/28/2024
1.0.350 141 5/2/2024
1.0.349 124 5/2/2024
1.0.348 131 5/2/2024
1.0.347 111 5/2/2024
1.0.346 160 4/7/2024
1.0.345 153 4/7/2024
1.0.344 140 4/5/2024
1.0.343 141 4/5/2024
1.0.342 157 4/5/2024
1.0.341 140 4/5/2024
1.0.340 141 4/4/2024
1.0.339 158 4/4/2024
1.0.338 153 4/3/2024
1.0.337 167 4/3/2024
1.0.336 156 4/3/2024
1.0.335 125 4/3/2024
1.0.334 139 4/2/2024
1.0.333 138 4/2/2024
1.0.332 146 4/2/2024
1.0.331 154 4/2/2024
1.0.330 146 4/2/2024
1.0.329 135 4/2/2024
1.0.328 160 4/1/2024
1.0.327 142 4/1/2024
1.0.325 141 4/1/2024
1.0.324 152 4/1/2024
1.0.323 148 4/1/2024
1.0.322 145 3/31/2024
1.0.321 145 3/31/2024
1.0.319 149 3/31/2024
1.0.318 139 3/31/2024
1.0.317 301 3/19/2024
1.0.316 141 3/19/2024
1.0.315 237 3/15/2024
1.0.314 162 3/15/2024
1.0.313 176 3/13/2024
1.0.312 161 3/13/2024
1.0.311 156 3/13/2024
1.0.310 151 3/13/2024
1.0.309 194 3/12/2024
1.0.308 209 3/12/2024
1.0.306 324 3/5/2024
1.0.305 152 3/5/2024
1.0.304 173 3/4/2024
1.0.303 151 3/4/2024
1.0.302 154 3/4/2024
1.0.301 152 3/4/2024
1.0.300 181 3/3/2024
1.0.299 147 3/3/2024
1.0.298 314 2/26/2024
1.0.297 154 2/26/2024
1.0.296 155 2/25/2024
1.0.295 150 2/25/2024
1.0.294 155 2/24/2024
1.0.293 145 2/24/2024
1.0.292 141 2/24/2024
1.0.291 153 2/24/2024
1.0.290 145 2/24/2024
1.0.289 145 2/24/2024
1.0.288 241 2/21/2024
1.0.287 163 2/21/2024
1.0.286 1,852 12/12/2023
1.0.285 157 12/12/2023
1.0.259 1,561 10/17/2023
1.0.258 145 10/17/2023
1.0.257 255 10/13/2023
1.0.256 154 10/13/2023
1.0.255 249 10/10/2023
1.0.254 162 10/10/2023
1.0.253 210 9/19/2023
1.0.252 152 9/19/2023
1.0.251 180 9/13/2023
1.0.250 167 9/13/2023
1.0.245 203 7/26/2023
1.0.244 189 7/26/2023
1.0.243 210 7/19/2023
1.0.242 199 7/19/2023
1.0.241 175 7/11/2023
1.0.240 187 7/11/2023
1.0.239 186 7/7/2023
1.0.238 172 7/7/2023
1.0.237 203 7/6/2023
1.0.236 184 7/6/2023
1.0.235 179 7/6/2023
1.0.234 187 7/6/2023
1.0.232 178 7/5/2023
1.0.231 186 7/5/2023
1.0.230 205 7/5/2023
1.0.229 193 7/5/2023
1.0.228 185 7/5/2023
1.0.227 188 7/5/2023
1.0.226 189 7/4/2023
1.0.225 181 7/4/2023
1.0.224 212 7/3/2023
1.0.223 185 7/3/2023
1.0.222 189 6/30/2023
1.0.221 166 6/30/2023
1.0.220 194 6/30/2023
1.0.219 181 6/30/2023
1.0.218 216 6/17/2023
1.0.217 194 6/17/2023
1.0.214 206 6/6/2023
1.0.213 188 6/6/2023
1.0.212 189 6/6/2023
1.0.211 185 6/6/2023
1.0.206 185 6/5/2023
1.0.205 190 6/5/2023
1.0.204 205 6/2/2023
1.0.203 170 6/2/2023
1.0.202 199 6/2/2023
1.0.201 199 6/2/2023
1.0.190 626 5/27/2022
1.0.189 575 5/27/2022
1.0.188 589 5/23/2022
1.0.187 596 5/23/2022
1.0.186 557 5/18/2022
1.0.185 560 5/18/2022
1.0.184 597 5/18/2022
1.0.183 601 5/18/2022
1.0.182 602 5/17/2022
1.0.181 590 5/17/2022
1.0.180 584 5/11/2022
1.0.179 599 5/11/2022
1.0.178 606 5/6/2022
1.0.177 611 5/6/2022
1.0.176 639 4/2/2022
1.0.175 617 4/2/2022
1.0.174 607 3/24/2022
1.0.173 594 3/24/2022
1.0.172 556 3/23/2022
1.0.171 588 3/23/2022
1.0.170 584 3/23/2022
1.0.169 577 3/23/2022
1.0.168 617 3/21/2022
1.0.167 607 3/21/2022
1.0.166 609 3/19/2022
1.0.165 629 3/19/2022
1.0.164 597 3/17/2022
1.0.163 598 3/17/2022
1.0.162 596 3/17/2022
1.0.161 618 3/17/2022
1.0.160 595 3/16/2022
1.0.159 619 3/16/2022
1.0.158 621 3/7/2022
1.0.157 618 3/7/2022
1.0.156 608 3/6/2022
1.0.155 608 3/6/2022
1.0.154 621 3/6/2022
1.0.153 625 3/6/2022
1.0.152 620 3/6/2022
1.0.151 625 3/6/2022
1.0.150 621 3/6/2022
1.0.149 634 3/6/2022
1.0.148 635 3/5/2022
1.0.147 625 3/5/2022
1.0.146 579 3/5/2022
1.0.145 730 3/5/2022
1.0.144 717 3/5/2022
1.0.143 739 3/5/2022
1.0.142 716 3/5/2022
1.0.140 622 3/5/2022
1.0.139 600 3/5/2022
1.0.137 605 3/5/2022
1.0.136 585 3/5/2022
1.0.135 475 3/5/2022
1.0.134 481 3/5/2022
1.0.133 614 3/5/2022
1.0.132 617 3/5/2022
1.0.131 600 3/5/2022
1.0.130 626 3/5/2022
1.0.128 606 3/5/2022
1.0.126 478 3/5/2022
1.0.125 504 3/4/2022
1.0.124 499 3/4/2022
1.0.123 503 3/4/2022
1.0.122 513 3/4/2022
1.0.120 508 3/4/2022
1.0.119 496 3/4/2022
1.0.118 487 3/3/2022
1.0.117 482 3/3/2022
1.0.116 478 3/3/2022
1.0.115 499 3/3/2022
1.0.114 507 2/21/2022
1.0.113 484 2/21/2022
1.0.112 519 2/19/2022
1.0.111 488 2/18/2022
1.0.110 495 2/18/2022
1.0.109 490 2/18/2022
1.0.107 486 2/17/2022
1.0.106 1,415 2/17/2022
1.0.105 527 1/18/2022
1.0.104 519 1/18/2022
1.0.103 361 12/20/2021
1.0.102 363 12/20/2021
1.0.101 347 12/20/2021
1.0.100 350 12/20/2021
1.0.99 331 12/20/2021
1.0.98 314 12/20/2021
1.0.96 347 12/18/2021
1.0.94 393 12/18/2021
1.0.93 363 12/18/2021
1.0.92 382 12/18/2021
1.0.0 502 3/5/2022