方法一 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对象,因此可以使用链式调用来访问嵌套的节点。