gpt4 book ai didi

c# - 在 C# 中从 JSON 对象获取对象值

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:50 26 4
gpt4 key购买 nike

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

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

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

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

关于如何解决此问题并以一种让我稍后搜索它们的方式列出文件名的任何想法?或者有更好的方法吗?

另请注意:由于使用的 SQL 服务器版本不同,我必须使用 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

}

}

关于c# - 在 C# 中从 JSON 对象获取对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50705546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com