Exemple #1
0
            static void FixNonStringJson(StringBuilder invalidJson, int endIndex, int nonStringLength)
            {
                string newJson = invalidJson.ToString(endIndex, nonStringLength);

                newJson = JsonFixers.FixNonStringJson(newJson);
                ReplaceStringPart(invalidJson, endIndex, nonStringLength, newJson);
            }
Exemple #2
0
        /// <summary>
        /// 1. Escapes double quotes in json property values
        /// 2. Replaces ":," with ":null,"
        /// </summary>
        public static string TryFix(string invalidJsonStr)
        {
            StringBuilder invalidJson = new(invalidJsonStr);

            // Unify string start
            invalidJson = invalidJson.Replace("\": \"", stringStart);

            int lastStartIndex = notFound,
                startIndex     = invalidJson.IndexOf(stringStart);

            // Fix non-string Json
            if (startIndex != notFound)
            {
                string newJson = invalidJson.ToString(0, startIndex);
                newJson = JsonFixers.FixNonStringJson(newJson);
                ReplaceStringPart(invalidJson, 0, startIndex, newJson);
            }

            int endIndex = 0;

            while (startIndex != notFound)
            {
                endIndex = stringEnd
                           .Select(end => invalidJson.IndexOf(end, startIndex + stringStart.Length + 1))
                           .Where(index => index != notFound)
                           .DefaultIfEmpty(notFound)
                           .Min();
                if (endIndex == notFound)
                {
                    break;
                }

                // Fix string
                int    innerStringStart = startIndex + stringStart.Length, innerStringLength = endIndex - innerStringStart;
                string newString = invalidJson.ToString(innerStringStart, innerStringLength);
                if (newString.IndexOf('\"') != notFound)
                {
                    newString = FixJsonString(newString);
                    ReplaceStringPart(invalidJson, innerStringStart, innerStringLength, newString);
                }

                lastStartIndex = startIndex;
                startIndex     = invalidJson.IndexOf(stringStart, lastStartIndex + 1);

                // Fix non-string Json
                if (startIndex != notFound)
                {
                    int nonStringLength = startIndex - endIndex;
                    FixNonStringJson(invalidJson, endIndex, nonStringLength);

                    startIndex = invalidJson.IndexOf(stringStart, lastStartIndex + 1);
                }
            }

            if (endIndex < invalidJson.Length)
            {
                int nonStringLength = invalidJson.Length - endIndex;
                FixNonStringJson(invalidJson, endIndex, nonStringLength);
            }

            return(invalidJson.ToString());