c json轉jobject是一個非常有用的工具,可以方便地將C語言中的JSON數據轉換成Java中的JObject格式。使用這個工具可以使我們更加方便地處理JSON數據,大大提高了工作效率。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <jansson.h> #include <jni.h> jobject json2jobject(JNIEnv *env, json_t *object) { if (!object) return NULL; jclass mapClass = (*env)->FindClass(env, "java/util/HashMap"); jmethodID constructor = (*env)->GetMethodID(env, mapClass, "<init>", "()V"); jobject hashMap = (*env)->NewObject(env, mapClass, constructor); json_t *key, *value; const char *ckey; json_object_foreach(object, ckey, value) { jobject jvalue; switch (json_typeof(value)) { case JSON_STRING: jvalue = (*env)->NewStringUTF(env, json_string_value(value)); break; case JSON_INTEGER: jvalue = (*env)->NewObject(env, (*env)->FindClass(env,"java/lang/Long"), (*env)->GetMethodID(env,(*env)->FindClass(env,"java/lang/Long"),"<init>","(J)V"), json_integer_value(value)); break; case JSON_REAL: jvalue = (*env)->NewObject(env, (*env)->FindClass(env,"java/lang/Double"), (*env)->GetMethodID(env,(*env)->FindClass(env,"java/lang/Double"),"<init>","(D)V"), json_real_value(value)); break; case JSON_TRUE: case JSON_FALSE: jvalue = (*env)->NewObject(env,(*env)->FindClass(env,"java/lang/Boolean"), (*env)->GetMethodID(env,(*env)->FindClass(env,"java/lang/Boolean"),"<init>","(Z)V"), json_is_true(value) ? JNI_TRUE : JNI_FALSE); break; case JSON_OBJECT: jvalue = json2jobject(env, value); break; case JSON_ARRAY: jvalue = json2jarray(env, value); break; default: jvalue = NULL; } (*env)->CallObjectMethod(env, hashMap, (*env)->GetMethodID(env, mapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"),(*env)->NewStringUTF(env, ckey), jvalue); } return hashMap; }
以上的代碼實現了將C語言中的JSON數據轉換為JObject格式的過程。我們可以將這個函數放在我們的代碼中,方便地進行JSON數據的處理。使用該函數,我們只需將JSON數據傳入即可得到對應的JObject對象。這樣可以極大地節省我們的代碼編寫時間,使我們的編碼效率更高。
上一篇python 整體消注釋
下一篇get方法json傳遞