Using language models to return JSON is very useful.
For OpenAI you can just pass the response_format: { type: "json_object" }
such as:
const completion = await openai.chat.completions.create({
messages: [
{
role: "system",
content: "You are a helpful assistant designed to output JSON.",
},
{ role: "user", content: "Who won the world series in 2020?" },
],
model: "gpt-3.5-turbo-1106",
response_format: { type: "json_object" }, // <==== here
});
For other models its not always reliable. It might say "Here is the JSON object you wanted... ". Or even add things at the end like. "I hope this helps!" 😡
Here is a function that will make sure you only get the JSON.
function parseJSONFromString(input: string): any {
// Regular expression to find a JSON object or array
const regex = /(\{.*\}|\[.*\])/s;
// Extract JSON string using the regular expression
const match = input.match(regex);
// Check if a match was found
if (match) {
try {
// Parse and return the JSON object/array
return JSON.parse(match[0]);
} catch (error) {
// Handle parsing error (invalid JSON)
console.error("Invalid JSON:", error);
return null;
}
} else {
// No JSON object/array found
console.warn("No JSON object or array found in the string.");
return null;
}
}
// Example usage
const exampleString = "here is your JSON object: { \"key\": \"value\" }";
const result = parseJSONFromString(exampleString);
console.log(result);
Top comments (0)