josdejong/jsonrepair

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

Open

#151 创建于 2025年12月16日

在 GitHub 查看
 (3 评论) (1 反应) (0 负责人)TypeScript (83 fork)github user discovery
enhancementhelp wanted

仓库指标

Star
 (2,359 star)
PR 合并指标
 (PR 指标待抓取)

描述

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

贡献者指南