Қос тырнақшаларда қос тырнақшалардан құтылыңыз

[{«Id»: «1», «msg»: «Lorem Ipsum» «}] жолында менің [{«Id»: «1», «msg»: «\» Lorem Ipsum \ «»}] . Мен генератордың кодын өзгерте алмаймын, сондықтан мен regex шешімді іздеймін немесе тиімді Java шешімін іздеймін.

Мен ешқандай пайдаланбайтын \ «[^ \»] *? (\ «*) [^ \»] *? \ « коэффициенттерін таңдап көрдім. .

Үлгіні әрқашан екі қос тырнақшаға біріктіретініне кепілдік берілмегенін ескеріңіз, бұл «Lorem» Ipsum «test» деген сияқты болуы мүмкін, ол «Lorem» \ «Сынақ» .

PS: I've already looked at Regular expression to escape double quotes within double quotes

3
Байланыстырылған сұрағыңыздағы Java-ді шешуді шешкен кезде не болды?
қосылды автор Duncan Jones, көзі
Байланыстырылған сұрағыңыздағы Java-ді шешуді шешкен кезде не болды?
қосылды автор Duncan Jones, көзі
Жоғарыда көрсеткенімдей, ол қашып кетті. Тек бастапқы жолды қайтарды
қосылды автор Aryan, көзі
Жоғарыда көрсеткенімдей, ол қашып кетті. Тек бастапқы жолды қайтарды
қосылды автор Aryan, көзі
Жоғарыда көрсеткенімдей, ол қашып кетті. Тек бастапқы жолды қайтарды
қосылды автор Aryan, көзі

9 жауаптар

Мәселесі

A finite automaton - the theoretical equivalent of a regex - can't parse recursive structures. Since you can have inner quotes, and possible inner-inner quotes, your problem can't be solved using a regex.

Заманауи регрессиялық қозғалтқыштар бұл мәселені бірнеше кеңейтіліммен жеңе алады, бірақ уақытты аң аулау баға белгілеріне - баға белгілеріне жұмсауға болмайды. Көп ұзамай, толықтай жарылған JSON талдаушысын жасайтыныңызды білесіз.

@ johnchen902 мәлімдеді , тіпті турин-машинамен жұмыс істейтін талдаушы екіұштылықты өңдей алмайды - сондықтан түзетуді ұсынбаңыз Сынған JSON-ге.

Шешімдер

Арнайы утилитаны пайдаланып JSON жасаңыз

Бұл жол жарамды JSON болып табылады. Бұл, ең алдымен, жаман идея болып табылады, себебі ол дұрыс жолмен кетпейді. gson секілді Java деректер құрылымынан JSON құра алатын JSON кітапханасын пайдалану керек >. Нысандар тізімін жасаңыз, оған Object-to-Object сөздікін қосыңыз және кітапхана қашып кетуді және қайта жасауды жүзеге асырсын.

Жаратушыға валидатор пайдалануды сұраңыз

Сызықты сыртқы көзден алған болсаңыз, сіз жұмыс істей алатын valid json сұрайтын мүлдем заңды. Менің ойымша, құрастырушы біріктірілген сызықтарды тігіп қойды, бұл құрылымды тілді құрудың дұрыс жолы. Түпнұсқадан JSONs жасау үшін стандартты кітапхананы пайдалануды сұраңыз немесе кем дегенде валидаторды пайдаланыңыз. Барлық қазіргі заманғы программалау тілдері осы механизмдерді ұсынады.

enter image description here

3
қосылды
@ johnchen902 Дұрыс, бірақ кем дегенде оны растауға болады және ықтимал түсіндірудің кез келген санының бірін таңдауға болады. Мәселе мынада, бұл жарамсыз - ОС жарамсыз жолдарды бекітіп, дұрыс емес JSON жасауы немесе қабылдауы керек.
қосылды автор Adam Matan, көзі
Оңай, түсінікті.
қосылды автор Adam Matan, көзі
Менің ойымша, ОП мұны бағдарламадан қалай құтылу керектігін білгісі келеді.
қосылды автор Duncan Jones, көзі
Тіпті жіптің бірнеше мағынасы болуы мүмкін, өйткені ол тіпті талдаушы арқылы талдау мүмкін емес. Мысал үшін жауапты қараңыз.
қосылды автор johnchen902, көзі
Жақсы шешім @ AdamMatan
қосылды автор Deepak M, көзі

Мәселесі

A finite automaton - the theoretical equivalent of a regex - can't parse recursive structures. Since you can have inner quotes, and possible inner-inner quotes, your problem can't be solved using a regex.

Заманауи регрессиялық қозғалтқыштар бұл мәселені бірнеше кеңейтіліммен жеңе алады, бірақ уақытты аң аулау баға белгілеріне - баға белгілеріне жұмсауға болмайды. Көп ұзамай, толықтай жарылған JSON талдаушысын жасайтыныңызды білесіз.

@ johnchen902 мәлімдеді , тіпті турин-машинамен жұмыс істейтін талдаушы екіұштылықты өңдей алмайды - сондықтан түзетуді ұсынбаңыз Сынған JSON-ге.

Шешімдер

Арнайы утилитаны пайдаланып JSON жасаңыз

Бұл жол жарамды JSON болып табылады. Бұл, ең алдымен, жаман идея болып табылады, себебі ол дұрыс жолмен кетпейді. gson секілді Java деректер құрылымынан JSON құра алатын JSON кітапханасын пайдалану керек >. Нысандар тізімін жасаңыз, оған Object-to-Object сөздікін қосыңыз және кітапхана қашып кетуді және қайта жасауды жүзеге асырсын.

Жаратушыға валидатор пайдалануды сұраңыз

Сызықты сыртқы көзден алған болсаңыз, сіз жұмыс істей алатын valid json сұрайтын мүлдем заңды. Менің ойымша, құрастырушы біріктірілген сызықтарды тігіп қойды, бұл құрылымды тілді құрудың дұрыс жолы. Түпнұсқадан JSONs жасау үшін стандартты кітапхананы пайдалануды сұраңыз немесе кем дегенде валидаторды пайдаланыңыз. Барлық қазіргі заманғы программалау тілдері осы механизмдерді ұсынады.

enter image description here

3
қосылды
@ johnchen902 Дұрыс, бірақ кем дегенде оны растауға болады және ықтимал түсіндірудің кез келген санының бірін таңдауға болады. Мәселе мынада, бұл жарамсыз - ОС жарамсыз жолдарды бекітіп, дұрыс емес JSON жасауы немесе қабылдауы керек.
қосылды автор Adam Matan, көзі
Оңай, түсінікті.
қосылды автор Adam Matan, көзі
Менің ойымша, ОП мұны бағдарламадан қалай құтылу керектігін білгісі келеді.
қосылды автор Duncan Jones, көзі
Тіпті жіптің бірнеше мағынасы болуы мүмкін, өйткені ол тіпті талдаушы арқылы талдау мүмкін емес. Мысал үшін жауапты қараңыз.
қосылды автор johnchen902, көзі
Жақсы шешім @ AdamMatan
қосылды автор Deepak M, көзі

Мәселесі

A finite automaton - the theoretical equivalent of a regex - can't parse recursive structures. Since you can have inner quotes, and possible inner-inner quotes, your problem can't be solved using a regex.

Заманауи регрессиялық қозғалтқыштар бұл мәселені бірнеше кеңейтіліммен жеңе алады, бірақ уақытты аң аулау баға белгілеріне - баға белгілеріне жұмсауға болмайды. Көп ұзамай, толықтай жарылған JSON талдаушысын жасайтыныңызды білесіз.

@ johnchen902 мәлімдеді , тіпті турин-машинамен жұмыс істейтін талдаушы екіұштылықты өңдей алмайды - сондықтан түзетуді ұсынбаңыз Сынған JSON-ге.

Шешімдер

Арнайы утилитаны пайдаланып JSON жасаңыз

Бұл жол жарамды JSON болып табылады. Бұл, ең алдымен, жаман идея болып табылады, себебі ол дұрыс жолмен кетпейді. gson секілді Java деректер құрылымынан JSON құра алатын JSON кітапханасын пайдалану керек >. Нысандар тізімін жасаңыз, оған Object-to-Object сөздікін қосыңыз және кітапхана қашып кетуді және қайта жасауды жүзеге асырсын.

Жаратушыға валидатор пайдалануды сұраңыз

Сызықты сыртқы көзден алған болсаңыз, сіз жұмыс істей алатын valid json сұрайтын мүлдем заңды. Менің ойымша, құрастырушы біріктірілген сызықтарды тігіп қойды, бұл құрылымды тілді құрудың дұрыс жолы. Түпнұсқадан JSONs жасау үшін стандартты кітапхананы пайдалануды сұраңыз немесе кем дегенде валидаторды пайдаланыңыз. Барлық қазіргі заманғы программалау тілдері осы механизмдерді ұсынады.

enter image description here

3
қосылды
@ johnchen902 Дұрыс, бірақ кем дегенде оны растауға болады және ықтимал түсіндірудің кез келген санының бірін таңдауға болады. Мәселе мынада, бұл жарамсыз - ОС жарамсыз жолдарды бекітіп, дұрыс емес JSON жасауы немесе қабылдауы керек.
қосылды автор Adam Matan, көзі
Оңай, түсінікті.
қосылды автор Adam Matan, көзі
Менің ойымша, ОП мұны бағдарламадан қалай құтылу керектігін білгісі келеді.
қосылды автор Duncan Jones, көзі
Тіпті жіптің бірнеше мағынасы болуы мүмкін, өйткені ол тіпті талдаушы арқылы талдау мүмкін емес. Мысал үшін жауапты қараңыз.
қосылды автор johnchen902, көзі
Жақсы шешім @ AdamMatan
қосылды автор Deepak M, көзі

Жоқ, мүмкін емес, себебі жолдың бірнеше мағынасы болуы мүмкін.

Мысалға:

[{"Id":"1","msg":""Lorem Ipsum""}]

Мүмкін

[{"Id":"1","msg":""Lorem Ipsum""}]

Яғни, ол қашып кетуі мүмкін

[{"Id":"1\",\"msg\":\"\"Lorem Ipsum\""}]

Бағдарламаның көп мағынасы болмаса, оны анықтауға ешқандай мүмкіндік жоқ.

2
қосылды
+1 Теориялық дұрыстығына және жақсы қарсы үлгіге арналған.
қосылды автор Adam Matan, көзі

Жоқ, мүмкін емес, себебі жолдың бірнеше мағынасы болуы мүмкін.

Мысалға:

[{"Id":"1","msg":""Lorem Ipsum""}]

Мүмкін

[{"Id":"1","msg":""Lorem Ipsum""}]

Яғни, ол қашып кетуі мүмкін

[{"Id":"1\",\"msg\":\"\"Lorem Ipsum\""}]

Бағдарламаның көп мағынасы болмаса, оны анықтауға ешқандай мүмкіндік жоқ.

2
қосылды
+1 Теориялық дұрыстығына және жақсы қарсы үлгіге арналған.
қосылды автор Adam Matan, көзі

Жоқ, мүмкін емес, себебі жолдың бірнеше мағынасы болуы мүмкін.

Мысалға:

[{"Id":"1","msg":""Lorem Ipsum""}]

Мүмкін

[{"Id":"1","msg":""Lorem Ipsum""}]

Яғни, ол қашып кетуі мүмкін

[{"Id":"1\",\"msg\":\"\"Lorem Ipsum\""}]

Бағдарламаның көп мағынасы болмаса, оны анықтауға ешқандай мүмкіндік жоқ.

2
қосылды
+1 Теориялық дұрыстығына және жақсы қарсы үлгіге арналған.
қосылды автор Adam Matan, көзі
String escaped = str.replaceAll(":\"\"(.+?)\"\"([,}])", ":\"\\\\\"$1\\\\\"\"$2");
0
қосылды
String escaped = str.replaceAll(":\"\"(.+?)\"\"([,}])", ":\"\\\\\"$1\\\\\"\"$2");
0
қосылды
String escaped = str.replaceAll(":\"\"(.+?)\"\"([,}])", ":\"\\\\\"$1\\\\\"\"$2");
0
қосылды