Получить значение объекта из объекта JSON в C # - PullRequest
0 голосов
/ 05 июня 2018

Вот то, что я пытаюсь достичь здесь:

  1. Получить список имен файлов и идентификаторов из базы данных
  2. Поиск этих файлов по сетевому пути
  3. Сохранение любых идентификаторов файлов, не найденных
  4. Поиск этого идентификатора во второй базе данных
  5. Поиск этих файлов по сетевому пути
  6. Список всех идентификаторов, гдефайлы не найдены ни в одном месте.

Проблема, с которой я сталкиваюсь, пытается использовать имена файлов из результатов, которые я собрал.

При запуске кода необработанные данные 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"
        }
    ]
}
}

1 Ответ

0 голосов
/ 05 июня 2018

Редактировать:

Вы можете использовать ниже селектор токена

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

            }

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...