josdejong/jsonrepair

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

Aperta

#151 aperta il 16 dic 2025

 (3 commenti) (1 reazione) (0 assegnatari)TypeScript (88 fork)github user discovery
enhancementhelp wanted

Metriche repository

Star
 (2397 stelle)
Metriche merge PR
 (Merge medio 26g 22h) (2 PR mergiate in 30 g)

Descrizione

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

Guida contributor