Files
VideoPipe/third_party/nlohmann/json_test.cpp
2026-06-03 12:43:14 +08:00

144 lines
4.7 KiB
C++

#include <iostream>
#include "json.hpp"
using json = nlohmann::json;
int main() {
/**
* 1. [OpenAI protocols]
* simulate construct request payload and dump it to string based on OpenAI protocols
*
*/
json openai_request_payload = {
{"model", "qwen-vl-max"},
{"messages", {{
{"role", "system"},
{"content", {
{{"type", "text"}, {"text", "You are a helpful assistant."}}
}}
},
{
{"role", "user"},
{"content", {
{{"type", "text"}, {"text", "请描述这张图。"}},
{
{"type", "image_url"},
{"image_url", {{"url", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"}}}
}
}}
}
}},
{"temperature", 2},
{"top_k", 5},
{"stream", false}
};
auto openai_request_str = openai_request_payload.dump(4);
std::cout << "-------------------------------" << std::endl;
std::cout << openai_request_str << std::endl;
std::cout << "-------------------------------" << std::endl;
/**
* 2. [OpenAI protocols]
* simulate parse response string to json object based on OpenAI protocols, and print content field
*
*/
auto openai_response_str = R"(
{
"choices": [
{
"message": {
"content": "这张图片展示了一位女士和一只狗在海滩上互动。女士坐在沙滩上,微笑着与狗握手。背景是大海和天空,阳光洒在她们身上,营造出温暖的氛围。狗戴着项圈,显得很温顺。",
"role": "assistant"
},
"finish_reason": "stop",
"index": 0,
"logprobs": null
}
],
"object": "chat.completion",
"usage": {
"prompt_tokens": 1270,
"completion_tokens": 54,
"total_tokens": 1324
},
"created": 1725948561,
"system_fingerprint": null,
"model": "qwen-vl-max",
"id": "chatcmpl-0fd66f46-b09e-9164-a84f-3ebbbedbac15"
}
)";
auto openaij = json::parse(openai_response_str);
std::cout << "-------------------------------" << std::endl;
std::cout << openaij["choices"][0]["message"]["content"] << std::endl;
std::cout << "-------------------------------" << std::endl;
/**
* 3. [Ollama protocols]
* simulate construct request payload and dump it to string based on Ollama protocols
*
*/
json ollama_request_payload = {
{"model", "llava"},
{"messages", {{
{"role", "user"},
{"content", "what is in this image?"},
{"images", {"base64"}}
}}},
{"options", {
{"temperature", 1},
{"top_k", 2}
}},
{"stream", false}
};
auto ollama_request_str = ollama_request_payload.dump(4);
std::cout << "-------------------------------" << std::endl;
std::cout << ollama_request_str << std::endl;
std::cout << "-------------------------------" << std::endl;
/**
* 4. [Ollama protocols]
* simulate parse response string to json object based on Ollama protocols, and print content field
*
*/
auto ollama_response_str = R"(
{
"model": "llava",
"created_at": "2023-12-13T22:42:50.203334Z",
"message": {
"role": "assistant",
"content": " The image features a cute, little pig with an angry facial expression. It's wearing a heart on its shirt and is waving in the air. This scene appears to be part of a drawing or sketching project.",
"images": null
},
"done": true,
"total_duration": 1668506709,
"load_duration": 1986209,
"prompt_eval_count": 26,
"prompt_eval_duration": 359682000,
"eval_count": 83,
"eval_duration": 1303285000
}
)";
auto ollamaj = json::parse(ollama_response_str);
std::cout << "-------------------------------" << std::endl;
std::cout << ollamaj["message"]["content"] << std::endl;
std::cout << "-------------------------------" << std::endl;
/**
* 5.
* simulate parse json string to json object using `_json`.
*/
auto j = R"(
{
"name": "jack",
"sex": "male",
"age": 18,
"p1": {
"aaa": 0.5,
"bbb": [1, 2, 3]
}
}
)"_json;
std::cout << "-------------------------------" << std::endl;
std::cout << j["p1"]["bbb"] << std::endl;
std::cout << "-------------------------------" << std::endl;
}