Golden Basim Ответов: 3

Как получить информацию из массива json?


как добраться код результата из этого массива ?

"Array\n(\n    [result] => false\n    [result_code] => TS-1027\n    [result_message] => There is no balance in the account\n)\n"


Что я уже пробовал:

JObject details = JObject.Parse(result);
string Code = (string)details["result_code"];


но эта ошибка появляется Неожиданный характер столкнулись, анализируя значение: А. Путь ", линия 0, положение 0

Richard MacCutchan

Как уже объяснил Крис Си, это не JSON. Вам нужно поговорить с людьми, которые вам его предоставляют.

3 Ответов

Рейтинг:
2

Chris Copeland

Этот текст не является допустимым выводом JSON, а выглядит как вывод при печати массива PHP. Если вы кодируете массив, вам следует рассмотреть возможность использования PHP json_encode[^] функция вместо этого, которая будет производить допустимый вывод, подобный:

{ "result": false, "result_code": "TS-1027", "result_message": ".." }


Golden Basim

нет, я не разработчик кода. я просто получаю этот результат от поставщика услуг SMS. так что мне все равно придется иметь дело с этим результатом.

Chris Copeland

Это прискорбно. Не имея возможности манипулировать выводом, я не думаю, что в C# существует какой-либо стандартный способ декодирования вывода PHP-массива в объект.

В этом случае вам, вероятно, потребуется либо: а) вручную разобрать ответ символ за символом, чтобы извлечь необходимые значения; б) использовать регулярные выражения для извлечения информации из текста; В) использовать регулярные выражения для переформатирования ответа в допустимый формат JSON, а затем попытаться десериализовать его.

Примером регулярного выражения может быть что-то вроде \[result\]\s+?\=\>\s+?(true|false)

Рейтинг:
2

F-ES Sitecore

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

string text = @"Array\n(\n    [result] => false\n    [result_code] => TS-1027\n    [result_message] => There is no balance in the account\n)\n";
var matches = Regex.Matches(text, @"\[(\w*)\]\s=>\s([^\\]*)");

foreach (Match m in matches)
{
    string name = m.Groups[1].Value;
    string value = m.Groups[2].Value;

    System.Diagnostics.Debug.WriteLine(name + " = " + value);
}


результат

result = false
result_code = TS-1027
result_message = There is no balance in the account


Рейтинг:
12

OriginalGriff

Это не JSON и даже не близко к нему: вам придется либо написать свой собственный парсер для него, либо поговорить с тем, кто его создал, и выяснить, с какими именно спецификациями данных вы должны работать (на самом деле, вы в значительной степени хотите сделать это в любом случае - вам, вероятно, понадобится это, чтобы написать свой собственный парсер).
Массив JSON из них будет выглядеть следующим образом:

{Array:[{"result":"false", "result_code":"TS-1027", "result_message":"There is no balance in the account"}]}

И будет работать с этими классами:
public class Array
{
    public string result { get; set; }
    public string result_code { get; set; }
    public string result_message { get; set; }
}

public class Example
{
    public IList<Array> Array { get; set; }
}

Взгляните на это:
Создание классов C# из JSON[^]
И
Создание JSON из классов C# [^]


Richard MacCutchan

Это выглядит как результат печати массива в PHP.

OriginalGriff

Может быть - но что он генерирует, когда массив содержит более одного элемента? :смеяться:

Richard MacCutchan

Что-то вроде:

Array
(
    [0] => Array
        (
            [result] =>
            [result_code] => TS-1027
            [result_message] => There is no balance in the account
        )

    [1] => Array
        (
            [result] => 1
            [result_code] => TS-1099
            [result_message] => The balance in the account is £12.96
        )

)