josdejong/jsonrepair

Escaping double quote doesn't work when it is followed by slash('/') character

Ouverte

#151 ouverte le 16 déc. 2025

 (3 commentaires) (1 réaction) (0 personne assignée)TypeScript (88 forks)github user discovery
enhancementhelp wanted

Métriques du dépôt

Stars
 (2 397 étoiles)
Métriques de merge PR
 (Merge moyen 26j 22h) (2 PRs mergées en 30 j)

Description

When input string has double quote character followed by slash('/') character which is part of string value, it throws error. Double quote without slash works fine.

Below code fails

const text = '{"name":"Parth","value":"This is test "message/stream"';
const parsed = jsonrepair(text);

with below error

FAIL  src/index.test.ts > jsonrepair ['regular'] > repair invalid JSON > should handle missing escaping of double quotes followed by a slash
Error: Object key expected at position 39
 ❯ throwObjectKeyExpected src/regular/jsonrepair.ts:891:11
    889| 
    890|   function throwObjectKeyExpected() {
    891|     throw new JSONRepairError('Object key expected', i)
       |           ^
    892|   }
    893|  

FAIL  src/index.test.ts > jsonrepair ['streaming'] > repair invalid JSON > should handle missing escaping of double quotes followed by a slash
Error: Unexpected character "/" at position 39
 ❯ throwUnexpectedCharacter src/streaming/core.ts:1023:11
    1021| 
    1022|   function throwUnexpectedCharacter() {
    1023|     throw new JSONRepairError(`Unexpected character ${JSON.stringify(input.charAt(i))}`, i)
       |           ^
    1024|   }
    1025| 
 ❯ parseRootEnd src/streaming/core.ts:481:7
 ❯ parse src/streaming/core.ts:171:20
 ❯ flush src/streaming/core.ts:96:12
 ❯ jsonrepair src/index.test.ts:774:5
 ❯ src/index.test.ts:695:22

If I remove slash after double quote it works. So below example works

test("should handle missing escaping of double quotes followed by a slash", () => {
      const text = '{"name":"Parth","value":"This is test "message/stream"';
      const parsed = jsonrepair(text);

      expect(parsed).toBe(
        '{"name":"Parth","value":"This is test \\"message/stream"}'
      );
    });

Guide contributeur