4
votes

My project handles data that is stored in a key value based NoSQL database.The value part is stored as byte stream.I want a type provider to read my data according to the schema of the byte stream.The schema of the data is represented as json schema. Can I use Json type provider to read this data? If no then what can be the solution to my problem?

1
You mean like bson? Mongodb for example? Could you provide some more specifics? - s952163
Clarification requested: Your data is a byte array (byte []). The schema of this byte array is described in a JSON document (or JSON schema)? If so the JSON type provider can't help you. For a better answer I think you need to provide some examples. - Just another metaprogrammer

1 Answers

5
votes

If your DB stores the JSON as a bytestream, simply decode it through System.Text.Encoding.UTF8.GetString (replace UTF8 with the appropriate encoding if necessary) in order to get the JSON as a regular string.

Then, you can use the JSON type provider on that stream like on any other stream, as long as you provide a compile-time sample for the type provider to use. A schema doesn't work.

In other words, you need to extract a fully representative sample of your database's JSON contents, then declare the provided types using that sample, either as a string directly embedded in the code, or as a file URI that your development machine can access.

As long as the sample matches the actual structure of your database, it will work at run-time.

// embedded in the code
type Simple1 = JsonProvider<""" { "name":"John", "age":94 } """>

// referenced 
type Simple2 = JsonProvider<@"C:\MyProjectFolder\sample.json">