Created
October 8, 2024 15:14
-
-
Save kukiron/7cfb8df5f718cf925bc62b70c94af0bb to your computer and use it in GitHub Desktop.
Complete a flat or nested JSON (without arrays). Default to "VALUE" for a missing key value.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const partialJson = `{"a1":"v1","a2":{"a3":"v3","a4":{"a5":"v5","a6"`; | |
// const partialJson = `{"a1":"v1","a2":{"a3":"v3","a4":{"a5`; | |
// const partialJson = `{"a1":"v1","a2":{"a3":"v3","a4":{"a5":"v5"}`; | |
const removeQuote = (str: string) => str.replace(/"/g, ''); | |
const findSubstringAtIndex = (json: string) => (index: number) => | |
json.substring(index + 1); | |
const insertClosingBrackets = (json: string) => { | |
const openBracketsCount = json.match(/{/g)?.length || 0; | |
const closeBracketsCount = json.match(/}/g)?.length || 0; | |
const closingBrackets = Array(openBracketsCount - closeBracketsCount) | |
.fill('}') | |
.join(''); | |
return `${json}${closingBrackets}`; | |
}; | |
const completePartialJson = (partialJson: string) => { | |
const lastIndexOfComma = partialJson.lastIndexOf(','); | |
const lastIndexOfColon = partialJson.lastIndexOf(':'); | |
const isLastCharClosingBracket = partialJson[partialJson.length - 1] === '}'; | |
const findLastItem = findSubstringAtIndex(partialJson); | |
// check if the last character is a closing bracket, only add matching brackets in that case | |
if (isLastCharClosingBracket) { | |
return insertClosingBrackets(partialJson); | |
} | |
if (lastIndexOfComma > lastIndexOfColon) { | |
const lastItem = findLastItem(lastIndexOfComma); | |
const formattedJson = partialJson.replace( | |
lastItem, | |
`"${removeQuote(lastItem)}":"VALUE"` | |
); | |
return insertClosingBrackets(formattedJson); | |
} | |
let updatedJson = partialJson; | |
const lastIndexOfOpeningBracket = partialJson.lastIndexOf('{'); | |
if (lastIndexOfOpeningBracket > lastIndexOfColon) { | |
const lastItem = findLastItem(lastIndexOfOpeningBracket); | |
updatedJson = partialJson.replace( | |
lastItem, | |
`"${removeQuote(lastItem)}":"VALUE"` | |
); | |
} else { | |
const lastItem = findLastItem(lastIndexOfColon); | |
updatedJson = partialJson.replace(lastItem, `"${removeQuote(lastItem)}"`); | |
} | |
return insertClosingBrackets(updatedJson); | |
}; | |
console.log(completePartialJson(partialJson)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment