Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Парсинг JSON  [new]
hulk77
Member

Откуда:
Сообщений: 123
Столкнулся с проблемой при парсинге JSON строки
Нужно забирать записи с тега "rows" и распределять его по колонкам с тега "column_order"

Схема JSON:

{
"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"]
]
}
}
}

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

 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 в принципе?
21 дек 16, 16:42    [20032887]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг JSON  [new]
hulk77
Member

Откуда:
Сообщений: 123
Другими словами, как распарсить такую JSON строку:

{ 
"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"]
]
}
}
}

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

Колонка1,   Колонка2,   Колонка3
John Finance 12 May 1972
Joan Admin 15 June 1975
21 дек 16, 22:31    [20034303]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг JSON  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
hulk77,

Никогда с JSON не работал и не знаю является ли формат ваших JSON данных общепринятым (если да, то нужно курить хелп, которого много, наверняка МС предоставила какие-то более изящные средства для извлечения таких данных), но из чисто спортивного интереса к 2016 серверу вот это:
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

выдает нужный вам результат:
Name	Department	Date Of Birth
John	Finance	12 May 1972
Joan	Admin	15 June 1975
21 дек 16, 23:18    [20034454]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг JSON  [new]
hulk77
Member

Откуда:
Сообщений: 123
SomewhereSomehow,

Это отлично подошло под задачу.
Спасибо Вам большое за помощь
Очень помогли
22 дек 16, 13:28    [20036407]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг JSON  [new]
hulk77
Member

Откуда:
Сообщений: 123
Вынужден снова просить вашей помощи..

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, то при выполнении запросов с большим количеством символов в результате:
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 принимает только определенный лимит символов
Можно как-то решить эту проблему?
23 дек 16, 19:06    [20042998]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг JSON  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Ага, а ваша функция и ваш веб ресурс прям на 100500 выдают валидный json, во всем виноват сервер.
23 дек 16, 19:45    [20043126]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг JSON  [new]
hulk77
Member

Откуда:
Сообщений: 123
Гавриленко Сергей Алексеевич
Ага, а ваша функция и ваш веб ресурс прям на 100500 выдают валидный json, во всем виноват сервер.


Та конечно и http-сервер может отдавать с ошибкой
А как можно отловить ошибку?
23 дек 16, 20:38    [20043264]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг JSON  [new]
hulk77
Member

Откуда:
Сообщений: 123
Гавриленко Сергей Алексеевич
Ага, а ваша функция и ваш веб ресурс прям на 100500 выдают валидный json, во всем виноват сервер.


Проверил на другой таблице - режет посреди даты http://prntscr.com/dn4twm
Похоже не в символах проблема а в их количестве..
23 дек 16, 20:48    [20043294]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг JSON  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
hulk77,

Опять же, ни разу не эксперт по JSON, но в BOL есть функция ISJSON
Например:
declare 
	@json1 nvarchar(max) = N'["00:00:00"]',
	@json2 nvarchar(max) = N'["00:00:00';

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

Результат:
@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)

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

    Так что "пилите, Шура, пилите", в смысле читайте =)
  • 23 дек 16, 22:31    [20043568]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    hulk77
    Member

    Откуда:
    Сообщений: 123
    SomewhereSomehow,

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

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


    BULK INSERT [Zoho].[dbo].[temp_1C_request] FROM 'C:\Счета.json'
    


    SELECT * FROM OPENJSON((SELECT [JSON_string] FROM [Zoho].[dbo].[temp_1C_request]), '$.response.result.rows') 
    

    JSON_string - nvarchar(max)

    То есть уже есть готовый результат правильной структуры json, в файле. sql server все равно обрезает длину строки
    Может кто сталкивался, можно чтото придумать или без вариантов?
    24 дек 16, 03:12    [20043997]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    Гавриленко Сергей Алексеевич
    Member

    Откуда:
    Сообщений: 37254
    hulk77
    пробовал на powershell выполнять http-запрос и записывать результат в файл, все отлично отработало
    А попробовать из файла в openjson? Или будем читать молитву "sql server все равно обрезает длину строки"?
    24 дек 16, 03:18    [20043998]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    aleks2
    Guest
    hulk77
    А как можно отловить ошибку?


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



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

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

    substring спасет-покажет.
    24 дек 16, 07:18    [20044053]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    alexeyvg
    Member

    Откуда: Moscow
    Сообщений: 31949
    hulk77
    То есть уже есть готовый результат правильной структуры json, в файле
    А чем вы проверили?
    24 дек 16, 18:46    [20044851]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    hulk77
    Member

    Откуда:
    Сообщений: 123
    Гавриленко Сергей Алексеевич
    hulk77
    пробовал на powershell выполнять http-запрос и записывать результат в файл, все отлично отработало
    А попробовать из файла в openjson? Или будем читать молитву "sql server все равно обрезает длину строки"?


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

     BULK INSERT [Z].[dbo].[temp_1C_request] FROM 'C:\Счета.json'
    

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


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

    То есть не в функции на C# проблема, а оказалось, что в самом SQL server. Такое впечатление что на длину символов есть ограничение или оно срабатывает при записи или чтении с поля. Считывал функцией OPENJSON. Она возвращает ошибку что не полная строка, нарушена схема. То есть даже не в окне результата в SSMS, а даже при обращении в строке.
    25 дек 16, 14:05    [20046261]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    hulk77
    Member

    Откуда:
    Сообщений: 123
    aleks2
    hulk77
    А как можно отловить ошибку?


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



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

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

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


    Не все так просто)
    В этой позиции просто обрывается json-строка в поле SQL Server'а
    Из разных таблиц истоника - в разных полях обрывается. но везде где-то на 4500-4700 символе по порядку (в Notepad++ считал)
    25 дек 16, 14:07    [20046268]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    hulk77
    Member

    Откуда:
    Сообщений: 123
    alexeyvg
    hulk77
    То есть уже есть готовый результат правильной структуры json, в файле
    А чем вы проверили?


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

    То есть, вебсервер обрабатывает и возвращает правильно
    Это или CLR обрезает, или на уровне SQL Server'a..
    25 дек 16, 14:10    [20046281]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    alexeyvg
    Member

    Откуда: Moscow
    Сообщений: 31949
    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 не трогать, он пока ни при чём.
    25 дек 16, 14:20    [20046308]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    hulk77
    Member

    Откуда:
    Сообщений: 123
    alexeyvg
    hulk77
    Это или CLR обрезает, или на уровне SQL Server'a..
    Так вы найдите, что приходит в SQL Server
    В OPENJSON что передаётся? Правильная строка? Как вы это проверяете?


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

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

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

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

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

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


    То есть, OPENJSON просто посреди строки обрезает почему-то json-строку
    25 дек 16, 22:09    [20047078]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    hulk77
    Member

    Откуда:
    Сообщений: 123
    Вот готовое решение: DLL с функциями отправки http-запроса, парсинга результата-json и запись в таблицу SQL Server

    +
    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 нужно выполнить:

    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];  
    


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

    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
    26 дек 16, 02:38    [20047319]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    Гавриленко Сергей Алексеевич
    Member

    Откуда:
    Сообщений: 37254
    hulk77
    Результат с SSMS в текстовый файл. Все верно отработано
    Вы реально глазками файл проверяли? Или взяли таки к концу шестого дня и скормили промежуточный файл в любой другой парсер json?

    Еще select @@version так и не опубликовано.

    Сообщение было отредактировано: 26 дек 16, 02:54
    26 дек 16, 02:49    [20047321]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    alexeyvg
    Member

    Откуда: Moscow
    Сообщений: 31949
    hulk77
    alexeyvg
    Так вы найдите, что приходит в SQL Server
    В OPENJSON что передаётся? Правильная строка? Как вы это проверяете?


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

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

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

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

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

    Отладка - это проверка каждого этапа обработки, и вы должны быть уверены, что на конкретном этапе обработка прошла правильно, а не просто "программа не ругнулась". То есть вы должны проверить результат каждого этапа, получить формальное вещественное подтверждение этому, в виде распарсенной структуры JSON, контрольной суммы, корректной отработки программы проверки и т.д.
    26 дек 16, 10:41    [20047863]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    aleks2
    Guest
    alexeyvg

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

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


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

    1. Присваивание переменной.
    2. Функцию Len().
    3. Функцию Substring().
    26 дек 16, 11:28    [20048074]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    Andrey Sribnyak
    Member

    Откуда: Киев
    Сообщений: 600
    [quot alexeyvg]
    hulk77
    пропущено...

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


    По идее может, если внутри Json'a есть одинарная кавычка
    26 дек 16, 13:06    [20048620]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    alexeyvg
    Member

    Откуда: Moscow
    Сообщений: 31949
    Andrey Sribnyak
    alexeyvg
    Это вообще непонятно. Как OPENJSON может "посреди строки обрезать"? Исходные данные же рид-онли, они не могут меняться.

    По идее может, если внутри Json'a есть одинарная кавычка
    "Обрезать строку" подразумевает, что есть область памяти, занятая строкой, и некая команда OPENJSON модифицирует область памяти.
    Но такого не происходит, OPENJSON не модифицирует передаваемый параметр с исходным JSON

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

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

    Это не придирки, программу нельзя отладить, и вообще нельзя быть программистом, рассуждая в стиле блондинки.
    В норме, как программа целиком, так и каждый её шаг, совершает некие однозначно определённые преобразования данных, которые можно однозначно проверить на правильность этих преобразований.
    И нужно точно описывать исходные данные, выполняемые действия, ожидаемый и фактический результаты, когда обращаешься к кому то за помощью или советом.
    26 дек 16, 22:51    [20050778]     Ответить | Цитировать Сообщить модератору
     Re: Парсинг JSON  [new]
    alexeyvg
    Member

    Откуда: Moscow
    Сообщений: 31949
    aleks2
    Тредстартеру следует освоить

    1. Присваивание переменной.
    2. Функцию Len().
    3. Функцию Substring().
    Ну, я уже предлагал 20046308 :-)
    ТС предпочитает долгий и трудоёмкий путь многократного запуска горы кода с внесением каждый раз нескольких случайных изменений.
    "Можно и за неделю, но тут помошник нужен (с)"
    26 дек 16, 22:55    [20050785]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить