UNPKG

extract-first-json

Version:

Extract the first JSON object or array from a string

33 lines (32 loc) 1.21 kB
import { parseJSONObject, parseJSONArray } from "parse-json-object"; import reduceFirst from "reduce-first"; function extract(text, startBracket, endBracket, parser) { return reduceFirst(Array.from(text), (char, startIndex)=>{ if (char === startBracket) { let section = text.slice(startIndex); while(section.lastIndexOf(endBracket) > 0){ section = section.slice(0, section.lastIndexOf(endBracket) + 1); const result = parser(section); if (result !== undefined) { return result; } } } return undefined; }); } export function extractJSONObject(text) { return extract(text, "{", "}", parseJSONObject); } export function extractJSONArray(text) { return extract(text, "[", "]", parseJSONArray); } export function extractJSON(text) { const object = extractJSONObject(text); const array = extractJSONArray(text); if (object !== undefined && array !== undefined) { return JSON.stringify(object).length > JSON.stringify(array).length ? object : array; } else { return object !== null && object !== void 0 ? object : array; } }