C# 在C中解析JArray对象#
我有一个名为C# 在C中解析JArray对象#,c#,json.net,C#,Json.net,我有一个名为response的JArray对象,其值为: {[ {"alternatives": [ { "transcript": "some text", "confidence": 0.77053386 } ] }, {"alternatives": [ { "transcript": " some other text", "confidence": 0.84036005
response
的JArray对象,其值为:
{[
{"alternatives": [
{
"transcript": "some text",
"confidence": 0.77053386
}
]
},
{"alternatives": [
{
"transcript": " some other text",
"confidence": 0.84036005
}
]
}
]}
我正在尝试访问转录本
值并将它们连接在一起。这是我的代码:
var results = response.ToObject<IList<Alternatives>>();
string mostConfidentTranscript = "";
foreach (var r in results)
mostConfidentTranscript += r.transcript + "\n";
代码编译时没有错误,但是,
results
是一个空列表。我错过了什么?感谢您的帮助。有效负载不正确,如果您的意思是发布对象列表,最好改为:
{"value":[...]}
然后您可以将其作为JObject读取,并将其值作为JArray获取
using Newtonsoft.Json.Linq;
result = response.Content.ReadAsAsync<JObject>().Result;
var results = result["value"] as JArray;
使用Newtonsoft.Json.Linq;
结果=response.Content.ReadAsAsync().result;
var结果=结果[“值”]为JArray;
提供的JSON无效。稍微修改一下,这就是我的工作-
public class Alternative
{
public double confidence { get; set; }
public string transcript { get; set; }
}
public class RootObject{
public List<Alternative> Alternatives{get;set;}
}
var json = "[{'alternatives':[{'transcript':'some text','confidence':0.77053386}]},{'alternatives':[{'transcript':' some other text','confidence':0.84036005}]}]";
var res = JsonConvert.DeserializeObject<List<RootObject>>(json);
// output : "some text: some other text"
Console.WriteLine(res[0].Alternatives[0].transcript + ":" + res[1].Alternatives[0].transcript);
公共类替代方案
{
公众双重信心{get;set;}
公共字符串转录本{get;set;}
}
公共类根对象{
公共列表选项{get;set;}
}
var json=“[{'alternations':[{'transcript':'some text','confidence':0.77053386}],{'alternations':[{'transcript':'some other text','confidence':0.84036005}]”;
var res=JsonConvert.DeserializeObject(json);
//输出:“一些文本:一些其他文本”
Console.WriteLine(res[0]。备选方案[0]。转录本+”:“+res[1]。备选方案[0]。转录本);
您似乎有多个对象,每个对象都包含一个带有单个备选方案的数组。这是一个非常奇怪的JSON结构。。。那部分修好了吗?是什么生成了JSON?@JonSkeet这是http post请求的响应,我无法真正更改它。再次查看,您发布的JSON无效。它不是有效的数组,因为它被包装在{}
中。它不是有效的对象,因为紧靠{
的是一个值(数组)而不是一个属性名。这确实是您收到的JSON吗?该JSON无效。如果上载到,您将看到一个错误,{[
无效。a{
表示对象的开头,该对象是一组无序的名称/值对。但是[
表示数组的开头,它是一个值;首先应该有一个属性名。有关非常简单的JSON标准的描述,请参阅。最好先使用JSON.net对其进行反序列化,然后做更多您想要做的事情
public class Alternative
{
public double confidence { get; set; }
public string transcript { get; set; }
}
public class RootObject{
public List<Alternative> Alternatives{get;set;}
}
var json = "[{'alternatives':[{'transcript':'some text','confidence':0.77053386}]},{'alternatives':[{'transcript':' some other text','confidence':0.84036005}]}]";
var res = JsonConvert.DeserializeObject<List<RootObject>>(json);
// output : "some text: some other text"
Console.WriteLine(res[0].Alternatives[0].transcript + ":" + res[1].Alternatives[0].transcript);