SQL Server function for getting values from JSON
Recently, I needed to build a report based on data in a SQL Server table that had as one of its fields some JSON data. The report was going into Excel, and initially, I was just parsing the JSON and putting in every key/value pair into the spreadsheet. (I did all that in C#.) I found that the client only wanted a few discrete fields from the JSON, so I instead wrote this SQL Server function that will get the value based on the input JSON "field":
USE utility; SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; IF OBJECT_ID('dbo.GetJSONValue') IS NOT NULL EXEC ('drop FUNCTION dbo.GetJSONValue;') GO CREATE FUNCTION dbo.GetJSONValue( @json varchar(max), @fieldName varchar(255)) RETURNS varchar(255) AS BEGIN declare @fieldStart int; declare @startIndex int; declare @nextValueIndex int; declare @length int; declare @value varchar(255); declare @valueReversed varchar(255); set @fieldStart = charindex(@fieldName, @json); if @fieldStart <= data-preserve-html-node="true" 0 begin set @value = null; end; else begin set @startIndex = charindex(@fieldName, @json)+len(@fieldName)+2; set @nextValueIndex = charindex(':', @json, @startIndex); set @valueReversed = reverse(substring(@json, @startIndex, @nextValueIndex - @startIndex)); set @length = len(@valueReversed) - charindex(',', @valueReversed); set @value = replace(substring(@json, @startIndex, @length),'"',''); end; return @value; end; GO grant execute on getjsonvalue to public;