数据格式转换策略

116 阅读1分钟

方法一 ObjectMapper

eg:

{
	"id": "chatcmpl-700wl7zQ8AS7c8HLK0vpnI",
	"object": "chat.completion",
	"created": 1680237995,
	"model": "gpt-35",
	"choices": [{
		"index": 0,
		"finish_reason": "stop",
		"message": {
			"role": "assistant",
			"content": "\n\nPython可以使用分词库进行message的tokens计算。一个常用的分词库是jieba分词库。以下是使用jieba分词库进行message分词的示例代码:\n\n```python\nimport jieba\n\nmessage = \"这是一段测试文本\"\ntokens = jieba.lcut(message)\n\nprint(tokens)\n```\n\n输出结果为:\n\n```\n['这', '是', '一段', '测试', '文本']\n```\n\n其中,`jieba.lcut`函数是将message进行分词,返回一个列表。可以对返回的列表进行进一步处理,例如去除停用词等。"
		}
	}],
	"usage": {
		"completion_tokens": 150,
		"prompt_tokens": 15,
		"total_tokens": 165
	}
}

使用Jackson库解析JSON字符串并使用JsonNode类访问其中的数据的示例代码:

ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(jsonString);

String id = rootNode.get("id").asText();
String object = rootNode.get("object").asText();
long created = rootNode.get("created").asLong();
String model = rootNode.get("model").asText();

JsonNode choicesNode = rootNode.get("choices");
JsonNode messageNode = choicesNode.get(0).get("message");
String role = messageNode.get("role").asText();
String content = messageNode.get("content").asText();

JsonNode usageNode = rootNode.get("usage");
int completionTokens = usageNode.get("completion_tokens").asInt();
int promptTokens = usageNode.get("prompt_tokens").asInt();
int totalTokens = usageNode.get("total_tokens").asInt();

其中,JsonNode类是Jackson库中的一个类,它表示一个JSON节点。使用ObjectMapper类的readTree()方法将JSON字符串解析成一个JsonNode对象。然后,可以使用get()方法来获取指定字段的节点,并使用asText()asLong()asInt()等方法将节点的值转换为Java的基本类型。需要注意的是,get()方法返回的是一个JsonNode对象,因此可以使用链式调用来访问嵌套的节点。

方法二 Gson

方法三 hutool