Reputation: 127
I get a json response after making a query to an api.
The JSON is like:
{
"results": [
{
"alternatives": [
{
"confidence": 0.965,
"transcript": "how do I raise the self esteem of a child in his academic achievement at the same time "
}
],
"final": true
},
{
"alternatives": [
{
"confidence": 0.919,
"transcript": "it's not me out of ten years of pseudo teaching and helped me realize "
}
],
"final": true
},
{
"alternatives": [
{
"confidence": 0.687,
"transcript": "is so powerful that it can turn bad morals the good you can turn awful practice and the powerful once they can teams men and transform them into angel "
}
],
"final": true
},
{
"alternatives": [
{
"confidence": 0.278,
"transcript": "you know if not on purpose Arteaga Williams who got in my mother "
}
],
"final": true
},
{
"alternatives": [
{
"confidence": 0.621,
"transcript": "for what pink you very much "
}
],
"final": true
}
],
"result_index": 0
}
I have to do two things to above json result (I keep it as a string*):
Process those strings.
Converting to string: I did it using:
var reader = new StreamReader(response.GetResponseStream());
responseFromServer = reader.ReadToEnd();
How to achieve this ?
Upvotes: 0
Views: 3457
Reputation: 6030
You could parse the JSON into concrete classes and work with those hereafter.
To do so, you could use a service like json2csharp which generates classes based on the JSON you provided. Alternatively, you could use the Visual Studio built-in feature Paste JSON As Classes:
public class Alternative
{
public double confidence { get; set; }
public string transcript { get; set; }
}
public class Result
{
public List<Alternative> alternatives { get; set; }
public bool final { get; set; }
}
public class RootObject
{
public List<Result> results { get; set; }
public int result_index { get; set; }
}
You can then use JSON.NET to parse the stringified JSON to concrete class instances:
var root = JsonConvert.DeserializeObject<RootObject>(responseFromServer);
Upvotes: 5
Reputation: 56536
You should deserialize this. It's the easiest way to deal with it. Using Json.NET and dynamic
that might look like:
dynamic jsonObj = JsonConvert.DeserializeObject(responseFromServer);
foreach (var result in jsonObj.results) {
foreach (var alternative in result.alternatives) {
Console.WriteLine(alternative.transcript);
}
}
But you might want to make explicit classes for it instead. Then you can do:
MyRootObject root = JsonConvert.DeserializeObject<MyRootObject>(responseFromServer);
And deal with it like any other .NET object.
Upvotes: 1