sozsoft-platform/ui/src/utils/deepParseJson.ts
2026-07-06 12:44:26 +03:00

32 lines
1 KiB
TypeScript

const isNumString = (str: string): boolean => !isNaN(Number(str))
type JsonObject = { [key: string]: unknown }
type JsonArray = Array<unknown>
type Json = JsonObject | JsonArray | string | number | boolean | null
function deepParseJson(jsonString: Json): Json {
if (typeof jsonString === 'string') {
if (isNumString(jsonString)) {
return jsonString
}
try {
return deepParseJson(JSON.parse(jsonString))
} catch {
return jsonString
}
} else if (Array.isArray(jsonString)) {
return jsonString.map((val) => deepParseJson(val as JsonArray))
} else if (typeof jsonString === 'object' && jsonString !== null) {
return Object.keys(jsonString).reduce<JsonObject>((obj, key) => {
const val = jsonString[key]
obj[key] = isNumString(val as string)
? val
: deepParseJson(val as number)
return obj
}, {})
} else {
return jsonString
}
}
export default deepParseJson