extract-first-json
Version:
Extract the first JSON object or array from a string
33 lines (32 loc) • 1.21 kB
JavaScript
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;
}
}