当前位置: 首页 > 面试题库 >

从C#中的JSON对象获取对象值

欧阳声
2023-03-14
问题内容

这是我要在这里实现的目标:

  1. 从数据库获取文件名和ID的列表
  2. 在网络路径上搜索这些文件
  3. 存储未找到的文件的任何ID
  4. 在第二个数据库中搜索该ID
  5. 在网络路径上搜索这些文件
  6. 列出所有在两个位置均未找到文件的ID。

我遇到的问题是尝试使用我收集的结果中的文件名。

运行代码时,会显示从数据库收集的原始JSON数据,但是当尝试仅列出文件名时,我什么也没得到(甚至没有错误)

关于如何解决此问题并以一种让我以后搜索它们的方式列出文件名的想法?还是有更好的方法来做到这一点?

另请注意:由于使用的是SQL Server版本,因此我必须使用FOR XML,因为FOR JSON不兼容。

编辑:使用Prany提供的代码,我现在现在只能输出音频文件名,但是我尝试并也输出sCallId,但出现重复问题(请参见下面的输出):

Getting Calls
2016\03\30\300320161614210106361-00000934412405.asf--84377-3668343241-514513
2016\03\30\300320161614210106361-00000934412405.asf--84385-3668343557-255773
2016\03\30\300320161614210106361-00000934412405.asf--84392-3668344445-516453
2016\03\30\300320161614210106361-00000934412405.asf--85000-3668749568-733799
2016\03\30\300320161614210106361-00000934412405.asf--85604-3668872399-722313
2016\03\30\300320161620220106362-00000934052048.asf--84377-3668343241-514513
2016\03\30\300320161620220106362-00000934052048.asf--84385-3668343557-255773
2016\03\30\300320161620220106362-00000934052048.asf--84392-3668344445-516453
2016\03\30\300320161620220106362-00000934052048.asf--85000-3668749568-733799
2016\03\30\300320161620220106362-00000934052048.asf--85604-3668872399-722313
2016\03\30\300320161634220106363-00000933211384.asf--84377-3668343241-514513
2016\03\30\300320161634220106363-00000933211384.asf--84385-3668343557-255773
2016\03\30\300320161634220106363-00000933211384.asf--84392-3668344445-516453
2016\03\30\300320161634220106363-00000933211384.asf--85000-3668749568-733799
2016\03\30\300320161634220106363-00000933211384.asf--85604-3668872399-722313
2016\04\04\040420160908190106389-00000527974488.asf--84377-3668343241-514513
2016\04\04\040420160908190106389-00000527974488.asf--84385-3668343557-255773
2016\04\04\040420160908190106389-00000527974488.asf--84392-3668344445-516453
2016\04\04\040420160908190106389-00000527974488.asf--85000-3668749568-733799
2016\04\04\040420160908190106389-00000527974488.asf--85604-3668872399-722313
2016\04\05\050420161913220106406-00000405271715.asf--84377-3668343241-514513
2016\04\05\050420161913220106406-00000405271715.asf--84385-3668343557-255773
2016\04\05\050420161913220106406-00000405271715.asf--84392-3668344445-516453
2016\04\05\050420161913220106406-00000405271715.asf--85000-3668749568-733799
2016\04\05\050420161913220106406-00000405271715.asf--85604-3668872399-722313

下面是我目前正在尝试使用的代码。

    //Run the SQL and wrap the output in results tags to fix Multiple Root Elements error. 
    string liveXML = "<results>" + cmd2.ExecuteScalar().ToString() + "</results>";
    //Create new XML Document
    XmlDocument LiveDoc = new XmlDocument();
    LiveDoc.LoadXml(liveXML);
    //Conver XML to JSON
    sjsonLive = JsonConvert.SerializeXmlNode(LiveDoc);
    //Output RAW JSON
    txtOut.AppendText("\r\n" + sjsonLive); 
    //Parse JSON into an Array
    var files = JObject.Parse(sjsonLive);


    //We want to run this values in a files seach, but for now let's print it to txtOut
    foreach (var f in files.SelectTokens("$..calls..@audioFileName"))
    foreach (var c in files.SelectTokens("$..calls..@sCallID"))
    {
        txtOut.AppendText("\r\n" + f.ToString() + " - " + c.ToString());
        //Conduct File Search Here...
    }

JSON数据示例:

{
"results": {
    "calls": [{
            "@audioFileName": "2016\\03\\30\\300320161614210106361-00000934412405.asf",
            "@sCallID": "84377-3668343241-514513"
        }, {
            "@audioFileName": "2016\\03\\30\\300320161620220106362-00000934052048.asf",
            "@sCallID": "84385-3668343557-255773"
        }, {
            "@audioFileName": "2016\\03\\30\\300320161634220106363-00000933211384.asf",
            "@sCallID": "84392-3668344445-516453"
        }, {
            "@audioFileName": "2016\\04\\04\\040420160908190106389-00000527974488.asf",
            "@sCallID": "85000-3668749568-733799"
        }, {
            "@audioFileName": "2016\\04\\05\\050420161913220106406-00000405271715.asf",
            "@sCallID": "85604-3668872399-722313"
        }
    ]
}
}

问题答案:

编辑:

您可以在下面使用令牌选择器

files.SelectTokens("$..calls..@audioFileName")

编辑2:

 var calls = files.SelectTokens("$..calls..@sCallID").ToList();
 var audiofiles = files.SelectTokens("$..calls..@audioFileName").ToList();
 for (int i = 0; i <= audiofiles.Count; i++)
        {
            //Conduct File search 
            if (true)
            {
               //access by index like audiofiles[i] and append to the query
            }
            else
            {
             //access calls by index like calls[i] and append to the query

            }

        }


 类似资料:
  • 我有一个名为AnimalsData的文件,它有一个由数组组成的对象。数组由一个对象和另一个数组组成。它看起来像这样: 我的HTML文件如下所示: 我正试图获取的值的类名对象从动画类数组。我一直在使用以下两个stackoverflow页面作为指南: 访问JSON数组中的对象和访问/处理(嵌套)对象、数组或JSON 我有另一个javascript文件,其中包含以下内容: 编辑我将for in循环中的"

  • 问题内容: 我有一个网址,返回的是这样的JSON对象: 我想获得价值。那么如何通过PHP检索它呢? 问题答案: $json = file_get_contents(‘url_here’); $obj = json_decode($json); echo $obj->access_token; 为此,需要启用它。可以通过在运行时完成以下操作来实现: 您也可以使用获取网址。要使用卷曲,可以使用中发现的

  • 我有一个返回JSON对象的URL,如下所示: 我想从URL获取JSON对象,然后获取值。 那么如何通过PHP检索它呢?

  • 问题内容: 在viewmodel对象中,以下是属性: 在VIEW中,javascript如下: 请在这里指导,我如何在javascript中获取JSON对象。 问题答案: 您可以使用以下内容: 这将输出以下内容(没有看到您的模型,我仅包含一个字段): 工作小提琴 AspNetCore AspNetCore使用的接口 MVC 5/6 您可以为此使用Newtonsoft: 这使您可以更好地控制json

  • } 我想从这个json对象中获取值。 我在下面试过了,但没有成功。

  • 问题内容: 我想从Http get响应中获取一个对象: 这是我当前对Http get的代码: 这是convertSteamToString函数: 现在,我只是得到一个字符串对象。我如何找回JSON对象。 问题答案: 您获得的字符串只是JSON Object.toString()。这意味着您将获取JSON对象,但使用String格式。 如果应该获取JSON对象,则可以输入: