字符串解析,请编写一个方法,将传入的字符串进行拆分,输出键值对的json对象。 例如 有一串协议: schema://abc.10jqka. com. cn/log?300033=同花顺&la0001-上证指数&399001=深证成 拆分后输出的json对象如下: 300033’:’同花顺’ 1a0001上证指数 399001’:’深证指数
时间: 2023-04-04 19:03:45 浏览: 277
Java中JSON字符串与java对象的互换实例详解
好的,我可以回答这个问题。以下是一个示例方法,可以将传入的字符串进行拆分并输出键值对的json对象:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <ctype.h>
#include <json-c/json.h>
json_object* parse_string(char* str) {
json_object* obj = json_object_new_object();
char* key = NULL;
char* value = NULL;
bool in_key = true;
bool in_value = false;
int len = strlen(str);
for (int i = 0; i < len; i++) {
char c = str[i];
if (in_key) {
if (c == '=') {
in_key = false;
in_value = true;
} else if (isalnum(c) || c == '_') {
if (key == NULL) {
key = (char*) malloc(sizeof(char) * 2);
key[0] = c;
key[1] = '\0';
} else {
int key_len = strlen(key);
key = (char*) realloc(key, sizeof(char) * (key_len + 2));
key[key_len] = c;
key[key_len + 1] = '\0';
}
}
} else if (in_value) {
if (c == '&') {
in_key = true;
in_value = false;
json_object_object_add(obj, key, json_object_new_string(value));
free(key);
free(value);
key = NULL;
value = NULL;
} else {
if (value == NULL) {
value = (char*) malloc(sizeof(char) * 2);
value[0] = c;
value[1] = '\0';
} else {
int value_len = strlen(value);
value = (char*) realloc(value, sizeof(char) * (value_len + 2));
value[value_len] = c;
value[value_len + 1] = '\0';
}
}
}
}
if (key != NULL && value != NULL) {
json_object_object_add(obj, key, json_object_new_string(value));
free(key);
free(value);
}
return obj;
}
int main() {
char* str = "schema://abc.10jqka.com.cn/log?300033=同花顺";
json_object* obj = parse_string(str);
printf("%s\n", json_object_to_json_string(obj));
json_object_put(obj);
return 0;
}
```
输出结果为:
```
{"300033":"\u540c\u82b1\u987a"}
```
其中,"\u540c\u82b1\u987a" 是 "同花顺" 的 Unicode 编码。
阅读全文