This question already has answers here:
How can I deserialize JSON with C#?
(19 answers)
Closed 6 years ago.
Folks,
I am trying to access a json value from Azure ML rest service but i get a null value all the time, i tried different options but it did not work. Can u please provide ideas.
Json String
{
"Results": {
"output1": {
"type": "table",
"value": {
"ColumnNames": ["Sentiment",
"Score"],
"ColumnTypes": ["String",
"Double"],
"Values": [["negative",
"0.20"],
**["negative",
"0.03"]**]
}
}
}
}
Trying to fetch the value between **
Tried the below.
using Newtonsoft.Json.Linq;
JObject o = JObject.Parse(sentimentvalue);
string valv = (string)o.SelectToken("Results[0].output1[0].Values[0]");
Your JSON path in the SelectToken seems to be wrong.
Try this:
string valv = (string)o.SelectToken("$.Results.output1.value.Values[0][1]");
Related
This question already has answers here:
Deserialize JSON with C#
(10 answers)
Closed 2 years ago.
I'm trying to extract specific data, in this case "Name" from a JSON file so that I can use it for the rest of my code later.
My current code where I load JSON:
public static void LoadJson()
{
using (StreamReader r = new StreamReader(#"C:\Users\Work\Documents\MyJson.json"))
{
string json = r.ReadToEnd();
var o = JsonConvert.DeserializeObject<JObject>(json);
var h = o.Value<JObject>("Data")
.Value<JArray>("Accounts");
Console.WriteLine(h[0]);
}
}
JSON example:
{
"Data": {
"Accounts": [
{
"Name": "owner",
"Address": "123456"
},
{
"Name": "Lerris",
"Address": "179672"
}
]
}
}
The output I get from my code right now:
JSON length is much longer than the one I posted above, but it was just to make an example.
Question:
How do I obtain and define both "Name" and "Address" value so that I can use them for the rest of my code?
I hope you guys will get what I mean. If I weren't specific enough please just say and I'll try to explain again.
See this section:
Use JsonDocument for access to data
This question already has answers here:
How can I deserialize an invalid json ? Truncated list of objects
(3 answers)
Closed 5 years ago.
I have incomplete JSON strings so the JSON is invalid, e.g.:
{
"Id": 0,
"Name": "John",
"Surname": "Smith",
"BadAnswers": ["Answer1", "Answer2"],
"CorrectAnswers": ["Answer3", "Answer4", "Answer5", "Answ
From this JSON I need to extract ID, Name and BadAnswers fields which are complete. I can't just deserialize this string using json.net because JSON is invalid.
Real case contains much more complex JSON with nested objects, lists, etc. but the idea the same.
So the main question is how to extract complete fields from partially completed and thus invalid JSON?
UPDATE 1. I can't make JSON valid by hand because it may be truncated at the random place not only at the place shown in the example. The only thing I know is that all required properties are present in truncated JSON. But if there any way to make JSON valid using json.net or any other library it would be a nice solution.
UPDATE 2. However there is already an answer to the question it is a quite low-level solution and requires a lot of manual work to manipulate with tokens and do not generalize well to different JSON formats.
The solution for you might be to use a JsonReader
For example, consider more complex JSON like this one:
{
"actions": [
{
"completed": true,
"id": 0
},
{
"completed": true,
"id": 1
}
],
"someProperty": false,
"anotherProperty": true,
"requiredIdProperty": 1,
"requiredArrayProperty": [
{
"nestedIdPropery": 0,
"nestedBoolProperty": true
},
{
"nestedIdPropery": 1,
"nestedBoolProperty": false
}
],
"truncatedObject": {
"firstProperty": 990,
"secondProperty": 0,
"thirdPrope
In this case, there are no problems with extracting requiredIdProperty using JsonReader but extracting requiredArrayProperty is painful because I need to manually handle all JSON tokens like JsonToken.ArrayStart and others. Said again, real case may and will contain much more complex JSON with more nested objects and arrays.
The ideal solution I'm looking for is to map JSON to a POCO class ignoring everything starting from the first invalid token or something like this.
The solution for you might be to use a JsonReader
using (FileStream s = File.Open("broken.json", FileMode.Open))
using (StreamReader sr = new StreamReader(s))
using (JsonReader reader = new JsonTextReader(sr))
{
while (reader.Read())
{
// deserialize only when there's "{" character in the stream
if (reader.TokenType == JsonToken.StartObject)
{
//Your code
}
}
}
Is there a reason why you can't just add the two missing characters to the string and then deserialize?
I know this seems too obvious but just incase:
jsonString+="]}";
Then deserialize jsonString.
This question already has answers here:
Parse Json string in C#
(5 answers)
Closed 5 years ago.
How can i parse the following string to json object in C#:
string unescapedstring = " {"SettingName":"name","SettingValue":"\\log1\\log2\\","Description":"description"}"
to get:
{
"SettingName": "name",
"SettingValue": "\\log1\\log2\\",
"Description": "description"
}
Thanks.
You can use JObject class and its method .parse which accepts string as argument:
JObject jo = JObject.Parse(unescapedstring);
Newtonsoft_Json Library
This question already has an answer here:
Parsing ISO Duration with JSON.Net
(1 answer)
Closed 6 years ago.
I got the following json result from a rest api and I am using Newtonsoft.Json to deserialize it to a c# object.
{
"d": {
"results": [
{
"Aufnr": "4000103",
"Workdate": "/Date(1482796800000)/",
"Beguz": "PT07H30M00S",
}
]
}
}
Aufnr and Workdate are working with String and DateTime, but I got no clue which datatype to use for Beguz
I tried TimeSpan and DateTime and got this error: Error converting value "PT07H30M00S" to type 'System.TimeSpan'. Path '[0].Beguz'
Any ideas?
This is a pure string:
public string Beguz { get; set; }
Of course if you want this PT07H30M00S string to be represented by some complex custom structure you could write a custom JsonConverter to achieve this task. In this converter you will need to provide the logic of how to parse this string back to some custom structure of yours.
This question already has answers here:
Force JSON.NET to include milliseconds when serializing DateTime (even if ms component is zero)
(3 answers)
Closed 7 years ago.
I am trying to parse JSON string into JObject using JObject.Parse().
But its not working ,This is my code:
string json="{\"hashkey\":\"paphAsethE2rexev6c5qAbayu3ebEc\",\"expiration\":\"2016-11-24T12:00:00.000Z\"}";
JObject resourceJson = JObject.Parse(json);
return Ok(resourceJson);
but in the output some value of expiration is missing that is(.000)
Expected Result:
{
"hashkey": "paphAsethE2rexev6c5qAbayu3ebEc",
"expiration": "2016-11-24T12:00:00.000Z"
}
the result which i am getting is:
{
"hashkey": "paphAsethE2rexev6c5qAbayu3ebEc",
"expiration": "2016-11-24T12:00:00Z"
}
please help
You can set the DateTime format in WebApiConfig.cs:
public static void Register(HttpConfiguration config)
{
//...
var converter = new Newtonsoft.Json.Converters.IsoDateTimeConverter
{DateTimeFormat="yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffK"};
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(converter);
// ...
}