stevenlam505 Ответов: 1

Как мне объединить две строки JSON, чтобы позже их можно было разобрать?


Это первая строка JSON:
{
    "ContractID": 140,
    "EndpointIdentifier": "24.2452",
    "ErrorMessage": "",
    "LogFileCollection": [
        "C:/Gaston/GrandScheme/MicroLog4.txt",
        "C:/Gaston/Grandscheme/MicroLog2.txt"
    ],
    "MethodName": "TestModeExit",
    "OperationBegan": "/Date(092120-0400)/",
    "OperationCompleted": "/Date(092120-0400)/",
    "OperationID": 1,
    "Outcome": 0,
    "Parameters": [
        {
            "Name": "ESPN",
            "Value": "23.4.39447",
            "VariableType": "System.String"
        }
    ],
}

И мой второй файл JSON:
{
    "CellRelayESN": "VR-[26::AB::]",
    "CellRelaySerialNumber": "[26::AB::]",
    "ContractID": 0,
    "DeviceClassName": "GastonGrand",
    "EndpointIdentifier": "2.3532.432",
    "ErrorMessage": "",
    "IsAuthenticated": true,
    "IsRegistrationProcessComplete": false,
    "LastDeregistered": "/Date(092120-0500)/",
    "LastRead": "/Date(092120-0500)/",
    "LogFileCollection": [],
    "MethodName": "RegistrationInformation",
    "OperationBegan": "/Date(092120)/",
    "OperationCompleted": "/Date(092120)/",
    "OperationID": 2,
    "Outcome": 0,
    "Parameters": [
        {
            "Name": "jobManager",
            "Value": "jobFoundYesOrNo",
            "VariableType": "String"
        },
        {
            "Name": "ESPN",
            "Value": "2.16.839447",
            "VariableType": "String"
        }
    ],
    "ReturnType": "RegistrationInfoResult",
    "Server": "Host-1",
    "ServiceTypeID": 1,
    "Status": "Registered",
    "TestRunID": 3206,
    "TokenID": null
}


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

В настоящее время я храню эти два JSON-файла в одном столбчатом DataTable, который позже преобразую в строку для синтаксического анализа с помощью JToken.Разбор. Однако, когда я пытаюсь разобрать его, я сталкиваюсь с ошибкой:
Additional text encountered after finished reading JSON content: {. Path '', line 2, position 0.'

в
JToken token = JToken.Parse(table);
линия. Мне интересно, Как правильно объединить эти два JSON-файла в одну строку, чтобы ее можно было правильно разобрать? Вот остальная часть моего кода:

public static List<string> CleanOperationsTable(string liteConString)
        {
            List<string> cleanedList = new List<string>();
            SQLiteConnection liteCon = new SQLiteConnection(liteConString);
            liteCon.Open();
            DataTable dtbl = new DataTable();

            string select = "SELECT ResponseBody FROM Operations LIMIT 2";

            SQLiteCommand cmd = new SQLiteCommand(select, liteCon);
            SQLiteDataAdapter sqliteDAP = new SQLiteDataAdapter(cmd);
            sqliteDAP.Fill(dtbl);

            /// Converts the 1 column DataTable into a single string to 
            /// it's easier to parse with JSON
            string table = string.Join(Environment.NewLine, dtbl.Rows.OfType<DataRow>().Select(x => string.Join(" ; ", x.ItemArray)));

            JToken token = JToken.Parse(table); // ERROR HERE


            return cleanedList;
        }

Richard MacCutchan

Вы должны распечатать объединенный текст, чтобы убедиться, что он правильно отформатирован.

stevenlam505

Я считаю, что столкнулся с ошибкой из-за ведущих и конечных фигурных скобок в каждой из них. Вы не знаете, как мне их убрать?

Richard MacCutchan

Вам нужно посмотреть, что вы делаете с данными, которые вы извлекаете из своей базы данных. То, что вы предлагаете, может быть правдой, но вам нужно изучить фактические данные, чтобы быть уверенным.

1 Ответов

Рейтинг:
8

Richard Deeming

Попробуйте что-нибудь вроде этого:

var rows = dtbl.Rows.Cast<DataRow>().Select(r => Convert.ToString(r[0]))
JArray token = new JArray(rows.Select(r => JToken.Parse(r)));


stevenlam505

Я предполагаю, что должен заменить строку JToken этим кодом, но когда я это делаю, я получаю эту ошибку: состояние подавления строки файла проекта описания кода серьезности
CS1929 ошибка 'datarow объект' не содержит определение для 'метода getString и DataReaderExtensions лучший метод расширения перегрузки '.GetString(DbDataReader, string)' требует приемника типа 'DbDataReader' SQLiteExtractor C:\Users\MainUser\source\repos\SQLiteExtractor\SQLiteExtractor\Program.cs 140 активных

Richard Deeming

Попробуй Convert.ToString(r[0]) вместо r.GetString(0).

stevenlam505

Это работает, большое спасибо! Не могли бы вы объяснить, что делает этот код?

stevenlam505

Вот как это выглядит https://imgur.com/a/Gk8Ot4o