powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Парсинг JSON
25 сообщений из 26, страница 1 из 2
Парсинг JSON
    #39372126
hulk77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с проблемой при парсинге JSON строки
Нужно забирать записи с тега "rows" и распределять его по колонкам с тега "column_order"

Схема JSON:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
{
	"response":
	{
		"uri":"\",
		"action":"EXPORT",
		"result":
		{
			"column_order":["USER_ID","Эл. почта","ФИО","Статус"],
				"rows":[
					["18743940000003","mail1@mail.ru","User1","ACTIVE"],
					["18743940000028","mail2@mail.ru","User2","DISABLED"],
					["18743940000013","mail3@mail.ru","User3","DISABLED"],
					["18743940001041","mail4@mail.ru","User4","ACTIVE"]
					]
		}
	}
}

Пробую парсить как-то так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
 SELECT [USER_ID],[Эл. почта],[ФИО],[Статус]
 FROM OPENJSON (@JStringsStatDDS, '$.response.result.rows')
 WITH (
        [USER_ID] nchar(15), 
        [Эл. почта] nchar(50),
        [ФИО] nchar(100),		
        [Статус] nchar(10)
 )



Но это для другой схемы подходит ..

В описании OPENJSON нет примера такой схемы как у меня

Подскажите, пожалуйста, возможно ли вообще распарсить json-строку такой схемы как у меня возможностями OPENJSON или T-SQL в принципе?
...
Рейтинг: 0 / 0
Парсинг JSON
    #39372424
hulk77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Другими словами, как распарсить такую JSON строку:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
{ 
 "response":
 {
  "uri": "/api/abc@h.com/EmployeeDB/EmployeeDetails",
  "action": "EXPORT",
  "result":
  {
      "column_order":["Name","Department","Date Of Birth"],
      "rows":[
          ["John","Finance","12 May 1972"],
          ["Joan","Admin","15 June 1975"]
                ]
  }
 }
}

чтобы получить строки:

Код: plaintext
1.
2.
 Колонка1,   Колонка2,   Колонка3 
John        Finance    12 May 1972
Joan        Admin      15 June 1975
...
Рейтинг: 0 / 0
Парсинг JSON
    #39372449
Фотография SomewhereSomehow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hulk77,

Никогда с JSON не работал и не знаю является ли формат ваших JSON данных общепринятым (если да, то нужно курить хелп, которого много, наверняка МС предоставила какие-то более изящные средства для извлечения таких данных), но из чисто спортивного интереса к 2016 серверу вот это:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
declare @json nvarchar(max) =
N'{ 
 "response":
 {
  "uri": "/api/abc@h.com/EmployeeDB/EmployeeDetails",
  "action": "EXPORT",
  "result":
  {
      "column_order":["Name","Department","Date Of Birth"],
      "rows":[
          ["John","Finance","12 May 1972"],
          ["Joan","Admin","15 June 1975"]
                ]
  }
 }
}';
  
select 
	p.*
from 
	openjson(json_query(@json, '$.response.result.rows')) j
	cross apply (
		select 
			[Name] = max(case when x.[key] = 0 then x.[value] end),
			[Department] = max(case when x.[key] = 1 then x.[value] end),
			[Date Of Birth] = max(case when x.[key] = 2 then x.[value] end)
		from 
			openjson(j.[value]) x
	) p


выдает нужный вам результат:
Код: sql
1.
2.
3.
Name	Department	Date Of Birth
John	Finance	12 May 1972
Joan	Admin	15 June 1975
...
Рейтинг: 0 / 0
Парсинг JSON
    #39372878
hulk77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SomewhereSomehow,

Это отлично подошло под задачу.
Спасибо Вам большое за помощь
Очень помогли
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374115
hulk77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вынужден снова просить вашей помощи..

Код: sql
1.
2.
3.
4.
5.
6.
7.
DECLARE @URL nchar(300) = 'https://report'
DECLARE @SQL_QUERY nvarchar(300) = NULL;
DECLARE @json nvarchar(MAX) = NULL;

SET @SQL_QUERY = 'SELECT top 9000 "CONTACTID","ФИО","Контакт - ответственный","Эл. почта" FROM "Контакты"'
SET @json = (SELECT [Zoho].[dbo].[fn_get_webrequest] (@URL + @SQL_QUERY, DEFAULT, DEFAULT))
SELECT @json


Этот запрос выполняется без ошибок


Но когда используется OPENJSON, то при выполнении запросов с большим количеством символов в результате:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
DECLARE @URL nchar(300) = 'https://report'
DECLARE @SQL_QUERY nvarchar(300) = NULL;
DECLARE @json nvarchar(MAX) = NULL;

SET @SQL_QUERY = 'SELECT top 9000 "CONTACTID","ФИО","Контакт - ответственный","Эл. почта"  FROM "Контакты"'
SET @json = (SELECT [Zoho].[dbo].[fn_get_webrequest] (@URL + @SQL_QUERY, DEFAULT, DEFAULT))
--SELECT @json

SELECT * FROM OPENJSON(@json, '$.response.result.rows') 



Возникает ошибка
Сообщение 13609, уровень 16, состояние 4, строка 13
Текст JSON имеет неправильный формат. В позиции 1434569 найден непредвиденный символ ".


Похоже что OPENJSON принимает только определенный лимит символов
Можно как-то решить эту проблему?
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374151
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, а ваша функция и ваш веб ресурс прям на 100500 выдают валидный json, во всем виноват сервер.
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374191
hulk77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичАга, а ваша функция и ваш веб ресурс прям на 100500 выдают валидный json, во всем виноват сервер.

Та конечно и http-сервер может отдавать с ошибкой
А как можно отловить ошибку?
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374200
hulk77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичАга, а ваша функция и ваш веб ресурс прям на 100500 выдают валидный json, во всем виноват сервер.

Проверил на другой таблице - режет посреди даты http://prntscr.com/dn4twm
Похоже не в символах проблема а в их количестве..
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374239
Фотография SomewhereSomehow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hulk77,

Опять же, ни разу не эксперт по JSON, но в BOL есть функция ISJSON
Например:
Код: sql
1.
2.
3.
4.
5.
6.
7.
declare 
	@json1 nvarchar(max) = N'["00:00:00"]',
	@json2 nvarchar(max) = N'["00:00:00';

select
	[@json1] = isjson(@json1),
	[@json2] = isjson(@json2);


Результат:
Код: sql
1.
2.
@json1	@json2
1	0


Проверяйте, что вам возвращается и далее по ситуации.

П.С.
Вообще, читайте хелп, к тому же в плане новых фичей он стал гораздо лучше.
Набираешь в гугле "JSON t-sql", тебе сразу первой ссылкой (после рекламы):
https://msdn.microsoft.com/ru-ru/library/dn921897.aspx
А там:
Общее описание

Извлечение значений из текста JSON и их использование в запросах.

Изменение значений JSON

Преобразование коллекций JSON в набор строк

OPENJSON

Преобразуйте данные SQL Server в JSON или экспортируйте JSON

Способы применения

Возврат данных из таблицы SQL Server в формате JSON

Анализ данных JSON с помощью запросов SQL

Импорт данных JSON в таблицы SQL Server

Загрузка файлов JSON в SQL Server

Проверка встроенной поддержки JSON

Дополнительные сведения о встроенной поддержке JSON

Форматирование результатов запроса как JSON с помощью предложения FOR JSON (SQL Server)

Преобразование данных JSON в строки и столбцы с помощью функции OPENJSON (SQL Server)

Проверка, построение запросов и изменение данных JSON с помощью встроенных функций (SQL Server)

Выражения пути JSON (SQL Server)

Индексирование данных JSON

Часто задаваемые вопросы о JSON в SQL Server

Публикации блога Майкрософт

Предложение FOR (Transact-SQL) (FOR JSON)

OPENJSON (Transact-SQL)

Функции JSON (Transact-SQL)

ISJSON (Transact-SQL)

JSON_VALUE (Transact-SQL)

JSON_QUERY (Transact-SQL)

JSON_MODIFY (Transact-SQL)

И все с примерами, описанием - читай не хочу.

Так что "пилите, Шура, пилите", в смысле читайте =)
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374286
hulk77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SomewhereSomehow,

как оказалось, это какая то проблема в самом sql server
не смог ни обработать openjson и записать в nvarchar(max) и text всю json-строку - обрезает на каком-то примерно одинаковом участке, по разным таблицам источника

пробовал на powershell выполнять http-запрос и записывать результат в файл, все отлично отработало


Код: sql
1.
BULK INSERT [Zoho].[dbo].[temp_1C_request] FROM 'C:\Счета.json'



Код: sql
1.
SELECT * FROM OPENJSON((SELECT [JSON_string] FROM [Zoho].[dbo].[temp_1C_request]), '$.response.result.rows') 


JSON_string - nvarchar(max)

То есть уже есть готовый результат правильной структуры json, в файле. sql server все равно обрезает длину строки
Может кто сталкивался, можно чтото придумать или без вариантов?
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374287
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hulk77пробовал на powershell выполнять http-запрос и записывать результат в файл, все отлично отработалоА попробовать из файла в openjson? Или будем читать молитву "sql server все равно обрезает длину строки"?
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374294
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hulk77А как можно отловить ошибку?

hulk77Возникает ошибка
Сообщение 13609, уровень 16, состояние 4, строка 13
Текст JSON имеет неправильный формат. В позиции 1434569 найден непредвиденный символ ".


В позиции 1434569 , Карл!

Имеющий глазки да увидит!

substring спасет-покажет.
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374472
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hulk77То есть уже есть готовый результат правильной структуры json, в файлеА чем вы проверили?
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374731
hulk77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевичhulk77пробовал на powershell выполнять http-запрос и записывать результат в файл, все отлично отработалоА попробовать из файла в openjson? Или будем читать молитву "sql server все равно обрезает длину строки"?

Да, срезу и попробовал так. Поэтому и применял PowerShell
В PowerShell http-запрос выполняется без проблем и формирует полноценную строку json
А SQL Server не может прочитать

Код: sql
1.
 BULK INSERT [Z].[dbo].[temp_1C_request] FROM 'C:\Счета.json'


Поле JSON_string - NVARCHAR(MAX) http://prntscr.com/dnnuhn
Код: sql
1.
SELECT * FROM 	OPENJSON((SELECT [JSON_string] FROM [Z].[dbo].[temp_1C_request]), '$.response.result.rows') 



Результат:
Текст JSON имеет неправильный формат. В позиции 1838076 найден непредвиденный символ ".

То есть не в функции на C# проблема, а оказалось, что в самом SQL server. Такое впечатление что на длину символов есть ограничение или оно срабатывает при записи или чтении с поля. Считывал функцией OPENJSON. Она возвращает ошибку что не полная строка, нарушена схема. То есть даже не в окне результата в SSMS, а даже при обращении в строке.
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374733
hulk77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks2hulk77А как можно отловить ошибку?

hulk77Возникает ошибка
пропущено...



В позиции 1434569 , Карл!

Имеющий глазки да увидит!

substring спасет-покажет.

Не все так просто)
В этой позиции просто обрывается json-строка в поле SQL Server'а
Из разных таблиц истоника - в разных полях обрывается. но везде где-то на 4500-4700 символе по порядку (в Notepad++ считал)
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374737
hulk77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvghulk77То есть уже есть готовый результат правильной структуры json, в файлеА чем вы проверили?

В файл выгрузил результат http-запроса при помощи PowerShell
Она и закрывается тегами ( http://prntscr.com/dnnvls), а в SQL Server попадает просто обрезанная строка

То есть, вебсервер обрабатывает и возвращает правильно
Это или CLR обрезает, или на уровне SQL Server'a..
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374747
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hulk77Это или CLR обрезает, или на уровне SQL Server'a..Так вы найдите, что приходит в SQL Server
В OPENJSON что передаётся? Правильная строка? Как вы это проверяете?

Вот у OPENJSON первый параметр:
jsonExpression
Is a Unicode character expression containing the JSON text.

Он у вас какого типа? Unicode? Там полностью весь текст из файла? Он не исказился?

У вас вопросы какие то абстрактные. Просто "не работает, ааа!"
Вы даже своего кода не показываете, ошибок, ничего. Не описываете, что делаете, и что получаете.
hulk77В этой позиции просто обрывается json-строка в поле SQL Server'аТак при чём тут OPENJSON?
Первый этап - получить целиком строку в SQL, убедиться, что она считалась целиком, и не искажена. JSON не трогать, он пока ни при чём.
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374879
hulk77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvghulk77Это или CLR обрезает, или на уровне SQL Server'a..Так вы найдите, что приходит в SQL Server
В OPENJSON что передаётся? Правильная строка? Как вы это проверяете?

Правы были в том что SQL пробует парсить ошибочный символ..

Только что изменит функцию на C# таким образом, чтобы результат возвращался не в SQL, а в текстовый файл.
Выгружает правильную строку json

Выполняю на SQL Server'e
Код: sql
1.
2.
SELECT * FROM 
	OPENJSON( (SELECT * FROM OPENROWSET(BULK N'C:\temp\WriteLines.txt',SINGLE_NCLOB) AS Document), '$.response.result.rows') 


Результат: http://prntscr.com/dnrtrn

Выполняю:
Код: sql
1.
SELECT * FROM OPENROWSET(BULK N'C:\temp\WriteLinesU.txt',SINGLE_NCLOB) AS Document


Результат с SSMS в текстовый файл. Все верно отработано


То есть, OPENJSON просто посреди строки обрезает почему-то json-строку
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374958
hulk77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот готовое решение: DLL с функциями отправки http-запроса, парсинга результата-json и запись в таблицу SQL Server

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Collections;
using System.Globalization;

// For the SQL Server integration
using Microsoft.SqlServer.Server;

// Other things we need for WebRequest
using System.Net;
using System.Text;
using System.IO;
using System.Linq;
using Dapper;
using Newtonsoft.Json.Linq;



namespace SqlWebRequest
{
    public partial class Functions
    {
        // Function to return a web URL as a string value.
        [Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
        public static void GET(SqlString uri, SqlString username, SqlString passwd, String Table_Name, String Connection_String, Boolean Create_Table)
        {
            // The SqlPipe is how we send data back to the caller
            SqlPipe pipe = SqlContext.Pipe;
            String document;

            // Set up the request, including authentication
            WebRequest req = WebRequest.Create(Convert.ToString(uri));
            if (Convert.ToString(username) != null & Convert.ToString(username) != "")
            {
                req.Credentials = new NetworkCredential(
                    Convert.ToString(username),
                    Convert.ToString(passwd));
            }
            ((HttpWebRequest)req).UserAgent = "CLR web client on SQL Server";

            // Fire off the request and retrieve the response.
            // We'll put the response in the string variable "document".
            WebResponse resp = req.GetResponse();
            req.Timeout = 50000;
            Stream dataStream = resp.GetResponseStream();
            StreamReader rdr = new StreamReader(dataStream);
            document = (String)rdr.ReadToEnd();

            // Close up everything...
            rdr.Close();
            dataStream.Close();
            resp.Close();

            // .. and return the output to the caller.
            // return (document);
            Parsing(document, Table_Name, Connection_String, Create_Table);
        }


        private static void Parsing(String Json_String, String Table_Name, String Connection_String, Boolean Create_Table)
        {
            var json = JObject.Parse(Json_String);

            var tableName = Table_Name;
            var colums = json["response"]["result"]["column_order"];
            var rows = json["response"]["result"]["rows"];
            var connectionString = Connection_String; //@"Data Source=192.168.1.52;Initial Catalog=TestDb;User ID=sa; Password=zxc12EE";

            using (IDbConnection db = new SqlConnection(connectionString))
            {
                if(Create_Table == true)
                {
                    db.Execute($@"
                    create table {tableName}
                    (
                        {string.Join("," + Environment.NewLine, colums.Select(colum => $"[{colum}] NVARCHAR(MAX)"))}
                    )
                  ", commandTimeout: 600);

                    db.Execute($@"
                    {string.Join(Environment.NewLine,
                       rows.Select(
                       row => $"INSERT INTO {tableName} VALUES ({string.Join(", ", row.Select(r => $"N'{r}'"))});"))}
                 ", commandTimeout: 600);

                }

                db.Execute($@"
                    {string.Join(Environment.NewLine,
                    rows.Select(
                        row => $"INSERT INTO {tableName} VALUES ({string.Join(", ", row.Select(r => $"N'{r}'"))});"))}
                ", commandTimeout: 600);

            }
        }
    }
}



На стороне SQL Server нужно выполнить:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
USE [BD]
GO
CREATE ASSEMBLY [SqlWebRequest]
FROM 'C:\DLL\SqlWebRequest.dll'
WITH PERMISSION_SET=UNSAFE;
GO

USE [BD]
GO
CREATE PROCEDURE [dbo].[fn_get_webrequest](
     @uri                 nvarchar(max),
     @user                nvarchar(255)=NULL,
     @passwd              nvarchar(255)=NULL,
     @Table_Name          nvarchar(50)=NULL,
     @Connection_String   nvarchar(255)=NULL,
     @Create_Table        bit =NULL

)
AS
EXTERNAL NAME [SqlWebRequest].[SqlWebRequest.Functions].[GET];


--IF OBJECT_ID('fn_get_webrequest') IS NOT NULL DROP FUNCTION [fn_get_webrequest]
--GO
--USE [BD]
--GO
--CREATE FUNCTION [dbo].[fn_get_webrequest](
--     @uri        nvarchar(max),
--     @user       nvarchar(255)=NULL,
--     @passwd     nvarchar(255)=NULL
--)
--RETURNS nvarchar(max)
--AS
--EXTERNAL NAME [SqlWebRequest].[SqlWebRequest.Functions].[GET];  



Вызывать таким образом:

Код: sql
1.
2.
3.
4.
5.
DECLARE @URL nchar(300) = 'http'
DECLARE @SQL_QUERY nvarchar(300) = 'SELECT * FROM "Счета"';
DECLARE @json nvarchar(MAX) = @URL + @SQL_QUERY;

EXEC [BD].[dbo].[fn_get_webrequest] @json, DEFAULT, DEFAULT, 'Счета', 'Data Source=;Initial Catalog=;User ID=; Password=', 0 



При подключении сборки в SQL Server в папке C:\DLL
был такой перечень библиотек http://prntscr.com/dnuowc

Проект библиотеки и нужные dll здесь http://dropmefiles.com/FcHPp
...
Рейтинг: 0 / 0
Парсинг JSON
    #39374959
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hulk77Результат с SSMS в текстовый файл. Все верно отработаноВы реально глазками файл проверяли? Или взяли таки к концу шестого дня и скормили промежуточный файл в любой другой парсер json?

Еще select @@version так и не опубликовано.
...
Рейтинг: 0 / 0
Парсинг JSON
    #39375072
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hulk77alexeyvgТак вы найдите, что приходит в SQL Server
В OPENJSON что передаётся? Правильная строка? Как вы это проверяете?

Правы были в том что SQL пробует парсить ошибочный символ..
А, то есть в OPENJSON передаётся неправильная строка (с ошибочным символом)?
[quote hulk77]Выполняю:
Код: sql
1.
SELECT * FROM OPENROWSET(BULK N'C:\temp\WriteLinesU.txt',SINGLE_NCLOB) AS Document


Результат с SSMS в текстовый файл. Все верно отработано[quote hulk77]Не понял, "всё верно отработало" - это значит, что файл байт-в-байт такой же, как исходный текстовый? Или вы это не проверили?

И в итоге, этот файл, который "с SSMS в текстовый файл" - он правильный? Его правильно обрабатывает парсер JSON? Какой парсер вы использовали для проверки, микрософтовский тоже использовали?
hulk77То есть, OPENJSON просто посреди строки обрезает почему-то json-строкуЭто вообще непонятно. Как OPENJSON может "посреди строки обрезать"? Исходные данные же рид-онли, они не могут меняться.

Вы точнее выражайтесь.

Отладка - это проверка каждого этапа обработки, и вы должны быть уверены, что на конкретном этапе обработка прошла правильно, а не просто "программа не ругнулась". То есть вы должны проверить результат каждого этапа, получить формальное вещественное подтверждение этому, в виде распарсенной структуры JSON, контрольной суммы, корректной отработки программы проверки и т.д.
...
Рейтинг: 0 / 0
Парсинг JSON
    #39375132
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Вы точнее выражайтесь.

Отладка - это проверка каждого этапа обработки, и вы должны быть уверены, что на конкретном этапе обработка прошла правильно, а не просто "программа не ругнулась". То есть вы должны проверить результат каждого этапа, получить формальное вещественное подтверждение этому, в виде распарсенной структуры JSON, контрольной суммы, корректной отработки программы проверки и т.д.

Не в коня корм.
Тредстартеру следует освоить

1. Присваивание переменной.
2. Функцию Len().
3. Функцию Substring().
...
Рейтинг: 0 / 0
Парсинг JSON
    #39375237
Andrey Sribnyak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot alexeyvg]hulk77пропущено...

Это вообще непонятно. Как OPENJSON может "посреди строки обрезать"? Исходные данные же рид-онли, они не могут меняться.


По идее может, если внутри Json'a есть одинарная кавычка
...
Рейтинг: 0 / 0
Парсинг JSON
    #39375677
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey SribnyakalexeyvgЭто вообще непонятно. Как OPENJSON может "посреди строки обрезать"? Исходные данные же рид-онли, они не могут меняться.
По идее может, если внутри Json'a есть одинарная кавычка"Обрезать строку" подразумевает, что есть область памяти, занятая строкой, и некая команда OPENJSON модифицирует область памяти.
Но такого не происходит, OPENJSON не модифицирует передаваемый параметр с исходным JSON

Я просто призвал ТС быть более точным, что бы было понятно, что он имеет в виду.

Его мысль, как я могу догадаться, была такая: OPENJSON в процессе обработки строки с JSON останавливает обработку, не доводя её до конца. Наверное, так? Хотя я могу только предполагать.

Это не придирки, программу нельзя отладить, и вообще нельзя быть программистом, рассуждая в стиле блондинки.
В норме, как программа целиком, так и каждый её шаг, совершает некие однозначно определённые преобразования данных, которые можно однозначно проверить на правильность этих преобразований.
И нужно точно описывать исходные данные, выполняемые действия, ожидаемый и фактический результаты, когда обращаешься к кому то за помощью или советом.
...
Рейтинг: 0 / 0
Парсинг JSON
    #39375679
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks2Тредстартеру следует освоить

1. Присваивание переменной.
2. Функцию Len().
3. Функцию Substring().Ну, я уже предлагал 20046308 :-)
ТС предпочитает долгий и трудоёмкий путь многократного запуска горы кода с внесением каждый раз нескольких случайных изменений.
"Можно и за неделю, но тут помошник нужен (с)"
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Парсинг JSON
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]