josdejong/jsonrepair

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

Open

#151 aberto em 16 de dez. de 2025

Ver no GitHub
 (3 comments) (1 reaction) (0 assignees)TypeScript (83 forks)github user discovery
enhancementhelp wanted

Métricas do repositório

Stars
 (2.359 stars)
Métricas de merge de PR
 (Métricas PR pendentes)

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"}'
      );
    });

Guia do colaborador