cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • JMP will suspend normal business operations for our Winter Holiday beginning on Wednesday, Dec. 24, 2025, at 5:00 p.m. ET (2:00 p.m. ET for JMP Accounts Receivable).
    Regular business hours will resume at 9:00 a.m. EST on Friday, Jan. 2, 2026.
  • We’re retiring the File Exchange at the end of this year. The JMP Marketplace is now your destination for add-ins and extensions.

JMP Wish List

We want to hear your ideas for improving JMP. Share them here.
%3CLINGO-SUB%20id%3D%22lingo-sub-482279%22%20slang%3D%22en-US%22%20mode%3D%22UPDATE%22%3EJSON%20%EC%98%A4%EB%A5%98%20%EC%B2%98%EB%A6%AC%20%EA%B5%AC%EB%AC%B8%20%EB%B6%84%EC%84%9D%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-482279%22%20slang%3D%22en-US%22%20mode%3D%22UPDATE%22%3E%3CP%3E%3CEM%3E%3CSTRONG%3EParse%20JSON%3C%2FSTRONG%3E%3C%2FEM%3E%20()%EC%9D%80%20%EC%98%A4%EB%A5%98%EB%A5%BC%20%EC%9E%98%20%EC%B2%98%EB%A6%AC%ED%95%98%EC%A7%80%20%EB%AA%BB%ED%95%98%EA%B8%B0%20%EB%95%8C%EB%AC%B8%EC%97%90%20%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0%20%EC%96%B4%EB%A0%B5%EC%8A%B5%EB%8B%88%EB%8B%A4.%20RunProgram%EC%9D%B4%EB%82%98%20%EB%B2%84%ED%8A%BC%20%EB%93%B1%EC%9D%98%20%EC%BD%9C%EB%B0%B1%EC%97%90%EC%84%9C%EB%8A%94%20%EC%8B%A4%ED%8C%A8%EB%A5%BC%20%EC%95%8C%EB%A6%AC%EB%8A%94%20%EC%9B%90%EC%B9%98%20%EC%95%8A%EB%8A%94%20%EB%AA%A8%EB%8D%B8%20%EB%8C%80%ED%99%94%20%EC%83%81%EC%9E%90%EA%B0%80%20%EC%83%9D%EC%84%B1%EB%90%A9%EB%8B%88%EB%8B%A4.%20%EB%98%90%ED%95%9C%20%EB%A1%9C%EA%B7%B8%EC%97%90%20%EC%8B%A4%ED%8C%A8%EA%B0%80%20%ED%91%9C%EC%8B%9C%EB%90%A9%EB%8B%88%EB%8B%A4.%20%EB%AC%B8%EC%A0%9C%EB%A5%BC%20%ED%95%B4%EA%B2%B0%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%B6%94%EA%B0%80%20JSL%EC%9D%B4%20%ED%95%84%EC%9A%94%ED%95%A9%EB%8B%88%EB%8B%A4.%3C%2FP%3E%0A%3CPRE%3E%3CCODE%20class%3D%22%20language-jsl%22%3ENew%20Window(%20%22parsejson%22%2C%0A%20%20%20%20Button%20Box(%20%22parse%22%2C%0A%20%20%20%20%20%20%20%20local(%20%7Bbirestore%2C%20errText%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20birestore%20%3D%20Batch%20Interactive(%201%20)%3B%20%2F%2F%20makes%20an%20alert%20dialog%20from%20a%20button%20without%20this%0A%20%20%20%20%20%20%20%20%20%20%20%20errText%20%3D%20Log%20Capture(%20p%20%3D%20Parse%20JSON(%20%22%5C!n%22%20%2F*%20invalid%20json%20error%20*%2F%20)%20)%3B%20%2F%2F%20writes%20to%20the%20log%20without%20this%0A%20%20%20%20%20%20%20%20%20%20%20%20Batch%20Interactive(%20birestore%20)%3B%20%2F%2F%20pop%20the%20previous%20behavior%0A%20%20%20%20%20%20%20%20%20%20%20%20If(%20Length(%20errText%20)%2C%20Throw(%20%22Caught%20an%20error%3A%22%20%7C%7C%20char(errText)%20)%20)%3B%20%2F%2F%20handle%20unexpected%20error%2C%20somehow%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F*%20use%20p%20here%20*%2F%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A)%3B%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%EC%A0%9C%EC%95%88%3A%20%EB%8F%99%EC%9E%91%EC%9D%84%20%EB%B3%80%EA%B2%BD%ED%95%98%EB%A0%A4%EB%A9%B4%20%EB%8B%A4%EC%9D%8C%EA%B3%BC%20%EA%B0%99%EC%9D%80%20%EC%84%A0%ED%83%9D%EC%A0%81%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%B6%94%EA%B0%80%ED%95%98%EC%84%B8%EC%9A%94.parseJson(x%2C%20%3CSTRONG%3EthrowIfError()%3C%2FSTRONG%3E%20)%3C%2FP%3E%0A%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fcommunity.jmp.com%2Ft5%2FDiscussions%2FFailsafe-JSON-parsing%2Fm-p%2F56951%23U56951%22%20class%3D%22lia-mention-container-editor-message%20lia-img-icon-forum-thread%20lia-fa-icon%20lia-fa-forum%20lia-fa-thread%20lia-fa%22%20target%3D%22_blank%22%3E%EC%95%88%EC%A0%84%ED%95%9C%20JSON%20%EA%B5%AC%EB%AC%B8%20%EB%B6%84%EC%84%9D%3C%2FA%3E%20%3C%2FP%3E%0A%3CP%3E%20%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-482279%22%20slang%3D%22en-US%22%20mode%3D%22UPDATE%22%3E%3CLINGO-LABEL%3E%EC%9E%90%EB%8F%99%ED%99%94%20%EB%B0%8F%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8C%85%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
Choose Language Hide Translation Bar
0 Kudos

Parse JSON error handling

Parse JSON() is hard to use because it does not handle errors nicely. In a callback, perhaps from RunProgram or a button, it will create an unwanted model dialog announcing the failure. It will also announce the failure in the log. It takes extra JSL to fix it up:

New Window( "parsejson",
    Button Box( "parse",
        local( {birestore, errText},
            birestore = Batch Interactive( 1 ); // makes an alert dialog from a button without this
            errText = Log Capture( p = Parse JSON( "\!n" /* invalid json error */ ) ); // writes to the log without this
            Batch Interactive( birestore ); // pop the previous behavior
            If( Length( errText ), Throw( "Caught an error:" || char(errText) ) ); // handle unexpected error, somehow
            /* use p here */
        )
    )
);

Suggestion: add an optional parameter to change the behavior, something like parseJson(x, throwIfError() )

Failsafe JSON parsing