将JSON对象作为JNI中的参数传递给CPP,并在CPP中检索JSON对象的数据

时间:2019-06-19 05:00:28

标签: c++ json java-native-interface

需要使用类对象从Java程序输入数据,将其转换为json对象,然后通过JNI传递给c ++。 在C ++中, 必须从对象中检索数据并将其存储在文件中。

我不知道如何发送和检索json对象的数据。 帮我解决一些简单的代码片段!

class sample
{  

    public native void callCPP(JSONObject jo);    
    public static void main(String args[])
    {  
        int val = 7;  
        JSONObject jo = new JSONObject;  
        jo.put("val",val);

        sample s = new sample();
        s.callCPP(jo);  
    }  
}

反之亦然(将数据从cpp作为JSONObject从cpp发送到Java。

1 个答案:

答案 0 :(得分:0)

假设您的意思是org.json.JSONObject

void Java_sample_callCPP(JNIEnv *env, jobject obj, jobject arg) {
    // This code calls arg->getInt("val"), assuming it is a org.json.JSONObject
    jclass cls = env->FindClass("org/json/JSONObject"); // alternatively: env->GetObjectClass(arg);
    jmethodID method = env->GetMethodID(cls, "getInt", "(Ljava/lang/String;)I"); // int getInt(java.lang.String key)
    jint val = env->CallIntMethod(arg, method, env->NewStringUTF("val"));
    std::cout << "val: " << val << std::endl;

    jmethodId method2 = env->GetMethodID(cls, "getString", "(Ljava/lang/String;)Ljava/lang/String;");
    jstring strVal = (jstring) env->CallObjectMethod(arg, method2, env->NewStringUTF("strVal"));

    // Make a copy of the returned Java string. We need to release the pointer again, too.
    const jchar *ptr = env->GetStringUTFChars(strVal, nullptr);
    std::string strVal_copy(ptr);
    env->ReleaseStringUTFChars(strVal, ptr);
    std::cout << "strVal: " << strVal_copy << std::endl;
}