Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从JSON结果C获取值#_C#_Json_Json.net - Fatal编程技术网

C# 从JSON结果C获取值#

C# 从JSON结果C获取值#,c#,json,json.net,C#,Json,Json.net,我试图通过使用Azure读取图像上的文本,从计算机视觉api结果中获取值。输出是JSON数据,但结果的语法看起来很奇怪 最终,我试图将值“text”从中剥离出来并写入一个文本文件,而不使用任何转义字符等 下面是我正在使用的代码,用于解析结果 static async Task MakeOCRRequest(string imageFilePath) { try { HttpClient client = new HttpClient(); clie

我试图通过使用Azure读取图像上的文本,从计算机视觉api结果中获取值。输出是JSON数据,但结果的语法看起来很奇怪

最终,我试图将值“text”从中剥离出来并写入一个文本文件,而不使用任何转义字符等

下面是我正在使用的代码,用于解析结果

static async Task MakeOCRRequest(string imageFilePath)
{
    try
    {
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
        string requestParameters = "language=unk&detectOrientation=true";
        string uri = uriBase + "?" + requestParameters;
        HttpResponseMessage response;
        byte[] byteData = GetImageAsByteArray(imageFilePath);

        using (ByteArrayContent content = new ByteArrayContent(byteData))
        {
            content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
            response = await client.PostAsync(uri, content);
        }

        string contentString = await response.Content.ReadAsStringAsync();

        ///////  It is at this point that I want to get the values from the "text" field
        JToken token = JToken.Parse(contentString).ToString();
        String[] result = contentString.Split(',');
        Console.writeline("\nResponse:\n\n{}\n", JToken.Parse(contentString).ToString());

    }
    catch (Exception e)
    {
        Console.WriteLine("\n" + e.Message);
    }
}
这是我从OCR过程中得到的结果。我还没有包括完整的结果,因为它代表了1700多行


  "language": "en",
  "textAngle": 0.0,
  "orientation": "Right",
  "regions": [
    {
      "boundingBox": "140,300,639,420",
      "lines": [
        {
          "boundingBox": "419,300,87,15",
          "words": [
            {
              "boundingBox": "419,300,87,15",
              "text": "0000175351"
            }
          ]
        },
        {
          "boundingBox": "140,342,337,47",
          "words": [
            {
              "boundingBox": "140,347,92,38",
              "text": "WE."
            },
            {
              "boundingBox": "241,347,13,36",
              "text": "1"
            },
            {
              "boundingBox": "266,342,211,47",
              "text": "0/1-1.9(2)"
            }
          ]
        },
使用当前代码,我得到了错误消息

JObject textResult = token["regions"]["text"].Value<JObject>();
JObject textResult=token[“regions”][“text”].Value();
无法访问
NewtonSoft.Json.Linq.JValue
上的子值


我想知道我是否请求了错误的密钥?

假设您有一个有效的JSON字符串 现在,您可以使用
Newtonsoft.Json
包将Json字符串反序列化为object,然后使用object获取值:

ResponseModel res = JsonConvert.DeserializeObject<ResponseModel>(contentString);
ResponseModel res=JsonConvert.DeserializeObject(contentString);
您的响应模型可以是这样的pocco类:

public class ResponseModel
{
    public string language { get; set; }
    public string textAngle { get; set; }
    public string orientation { get; set; }
    //you have to create pocco class for RegionModel
    public List<RegionModel> regions { get; set; }
    ....
}
公共类响应模型
{
公共字符串语言{get;set;}
公共字符串textAngle{get;set;}
公共字符串方向{get;set;}
//您必须为RegionModel创建pocco类
公共列表区域{get;set;}
....
}

如果您需要检索所有
文本
属性值,而不考虑
边界框
,那么您可以在将json解析为
JToken
后使用Lower linq

JToken jToken = JToken.Parse(json);

var allTexts = jToken["regions"].SelectMany(reg => reg["lines"].SelectMany(line => line["words"]).Select(word => word["text"].ToString()).ToList()).ToList();
输出:(来自调试器)


粘贴的结果不是有效的JSON,它没有逗号,字符串不能拆分为多行。加上“regions”是一个数组,而不是一个对象。嗨,Tom,我已经调整了代码,使之适应以前的版本,这包括了一个分割,以包含逗号。请参阅修订版:-)您可以使用Ok-brilliant检查json字符串是否有效,谢谢S.Oriolo。它说这现在是有效的JSON——但是从结果中获取“text”值的正确方法是什么呢?从粘贴的JSON中,有多个
text
值;您可以更具体地添加引发该错误的代码吗?从您粘贴的内容来看,似乎缺少一些代码