json对象的值为数组,怎么获取数组某项的值(注意不是json数组)

json对象的值为数组,怎么获取数组某项的值(注意不是json数组),第1张

package com;

import javautilList;

import comKensouPerson;

import comalibabafastjsonJSON;

public class Yuma

{

public static void main(String[] args)

{

String result =

        "{\"data1\":[{\"name\":\"aa\",\"age\":\"12\"},{\"name\":\"bb\",\"age\":\"13\"}],\"data2\":{\"nowpage\":1,\"pagesize\":2}}";

Kensou ps = JSONparseObject(result, Kensouclass);

Systemoutprintln(ps);

List<Person> data1 = psgetData1();

for(int i = 0; i < data1size(); i++)

{

Person p = data1get(i);

Systemoutprintln(p);

}

Person data2 = psgetData2();

Systemoutprintln(data2);

}

}

/

  模型对象不需要构造函数, 至少只需要setter方法<br>

  Person类可以是内嵌类,也可以是外部类 <br>

  Kensou类只能是外部类<br>

  集合类可以是数组或者List类型<br>

  <p>

  使用的是<font color="red">fastjson-1136jar</font>

 /

class Kensou

{

private List<Person> data1;

private Person data2;

public List<Person> getData1()

{

return data1;

}

public void setData1(List<Person> data1)

{

thisdata1 = data1;

}

public Person getData2()

{

return data2;

}

public void setData2(Person data2)

{

thisdata2 = data2;

}

@Override

public String toString()

{

return Stringformat("Kensou [data1=%s, data2=%s]", data1, data2);

}

class Person

{

private String name;

private int age;

private int nowpage;

private int pagesize;

public String getName()

{

return name;

}

public void setName(String name)

{

thisname = name;

}

public int getAge()

{

return age;

}

public void setAge(int age)

{

thisage = age;

}

public int getNowpage()

{

return nowpage;

}

public void setNowpage(int nowpage)

{

thisnowpage = nowpage;

}

public int getPagesize()

{

return pagesize;

}

public void setPagesize(int pagesize)

{

thispagesize = pagesize;

}

@Override

public String toString()

{

return Stringformat("Person [name=%s, age=%s, nowpage=%s, pagesize=%s]", name, age, nowpage, pagesize);

}

}

}

C语言调用Java,还有Java调用C,都使用到JNI技术,C语言调用需要创建Java虚拟机,可查看函数JNI_CreateJavaVM、DestroyJavaVM的资料,函数声明在jnih头文件(JDK)中。需注意参数类型转换,两种语言的参数类型和传递有讲究,有多个返回的话,必须传递对象参数进行处理。

1首先需要写三个类,这个类和json中对象的数据结构应该是对应的,这里的例子可能忽略了部分属性和数据类型,仅供参考:

//Json数据的对象结构

public class MyJson

{

public List<MyTreeNodeBean> beanList

}

//树形结构中的对象结构

public class MyBean

{

public string id

public string title

public string note

public MyImage image

public string maxid

public string fold

public string putright

public List<MyTreeNodeBean> children

public MyBean()

{

}

}

//对象里面Image的结构

public class MyImage

{

public string url

public string border

public string height

public string width

}

2因为json是树形结构的数据,所以需要递归遍历去寻找对应ID的对象

//这个类负责按照ID寻找对象

public class MyHelper

{

//FindById函数的重载函数,用来第一次调用

public static MyBean FindById(string id, string jsonString)

{

return FindById(id, jsonString, null);

}

//FindById递归寻找函数

public static MyBean FindById(string id, string jsonString, List<MyBean> beanList)

{

if (beanList == null) {

//第一次调用的时候,寻找的列表是最高层的根底下的对象列表

//将json数据转换成C#对应类型(用了NewtonsoftJson)

MyJson json = JavaScriptConvertDeserializeObject<MyJson>(jsonString);

beanList = jsonbeanList;

}

//遍历对象列表,寻找对应ID的对象

MyBean returnBean = null;

foreach (MyBean bean in beanList) {

if (beanid == id) {

//找到了

returnBean = bean;

} else {

//递归寻找:

//如果不是,就寻找此对象的children列表

returnBean = FindById(id, jsonString, beanchildren);

}

//如果找到,就跳出寻找

if (returnBean != null) {

break;

}

}

return returnBean;

}

}

3使用实例:

//假设json的字符串在变量jsonString中

MyBean bean = MyHelperFindById("33", jsonString);

if (bean != null) {

//使用查找出来的bean

}

写在最后:

以上代码仅供参考,没有经过编译测试、有可能存在书写错误。但是逻辑清晰、没有任何冗余内容。请楼主阅读以后自己在理解的基础上进行修改、改进再使用。

另外楼主如果想给分就请直接给,请不要马马虎虎把大家的回答投票,比较反感,最后祝你早日搞定这个问题~~~

#include <jnih>   

#include "com_test_Testh"  

#include <stdioh>   

#include <stdlibh>   

#include <stringsh>   

  

//获取字符串   

JNIEXPORT void JNICALL Java_com_test_Test_sayHello(JNIEnv  env, jobject obj,   

  jstring s) {   

  

 char  str = (char ) (env)->GetStringUTFChars(env, s, 0);   

 printf("\n c-string: hello - %s", str);   

  

}   

  

//获取,返回int   

JNIEXPORT jint JNICALL Java_com_test_Test_add(JNIEnv  env, jobject obj,   

  jint a, jint b) {   

 int i = a;   

 int j = b;   

 printf("\n c-int: %d - %d", i, j);   

 char str[256];   

 sprintf(str, "%d", i + j);   

 return (jint) i + j;   

}   

  

//获取,返回float   

JNIEXPORT jfloat JNICALL Java_com_test_Test_getFloat(JNIEnv  env, jobject obj,   

  jfloat f) {   

 float fl = f;   

 printf("\n c-float: %3f", fl);   

  

 fl = 200555;   

 return (jfloat) fl;   

}   

  

//获取,返回 double   

JNIEXPORT jdouble JNICALL Java_com_test_Test_getDouble(JNIEnv  env,   

  jobject obj, jdouble dou) {   

 double d = dou;   

 printf("\n c-double: %3f", d);   

  

 d = 80088;   

 return (jdouble) d;   

}   

  

//获取,返回boolean   

JNIEXPORT jboolean JNICALL Java_com_test_Test_getBoolean(JNIEnv  env,   

  jobject obj, jboolean bool) {   

  

 unsigned char b = bool;   

 printf("\n c-boolean: %lu  ", b);   

 if (b) {   

  printf("true");   

 } else {   

  printf("false");   

 }   

  

 b = 1;   

 return (jboolean) b;   

}   

  

//获取,返回 string   

JNIEXPORT jstring JNICALL Java_com_test_Test_getString(JNIEnv  env,   

  jobject obj, jstring s) {   

 char  st = (char ) (env)->GetStringUTFChars(env, s, 0);   

 printf("\n c-string:  %s", st);   

  

 char  str = "hello wang wu!";   

 jstring rtn;   

 rtn = (env)->NewStringUTF(env, str);   

 return rtn;   

}   

  

//获取,返回 string []   

JNIEXPORT jobjectArray JNICALL Java_com_test_Test_getStringArray(JNIEnv  env,   

  jobject obj, jobjectArray arr) {   

 int len = (env)->GetArrayLength(env, arr);   

 printf("\n c-stringArray :");   

 int i = 0;   

 for (i = 0; i < len; i++) {   

  jobject obj = (env)->GetObjectArrayElement(env, arr, i);   

  jstring str = (jstring) obj;   

  const char  szStr = (env)->GetStringUTFChars(env, str, 0);   

  printf(" %d-%s ", i, szStr);   

  (env)->ReleaseStringChars(env, str, szStr);   

 }   

 //-----返回----   

  

 jstring str;   

 jobjectArray args = 0;   

 jsize size = 5;   

 char sa[] = { "Hello,", "world!", "zhang", "san", "yuang" };   

 int j = 0;   

 jclass objClass = (env)->FindClass(env, "java/lang/String");   

 args = (env)->NewObjectArray(env, size, objClass, 0);   

 for (j = 0; j < size; j++) {   

  str = (env)->NewStringUTF(env, sa[j]);   

  (env)->SetObjectArrayElement(env, args, j, str);   

 }   

 return args;   

}   

  

-----------------------------------------------------------------   

  

下面是Testjava   

  

package comtest;   

  

public class Test {   

 private native void sayHello(String str);   

  

 private native int add(int a, int b);   

  

 private native float getFloat(float f);   

  

 private native double getDouble(double d);   

  

 private native boolean getBoolean(boolean b);   

  

 private native String getString(String str);   

  

 private native String[] getStringArray(String[] sa);   

  

 static {   

  SystemloadLibrary("Test");   

 }   

  

 public static void main(String[] args) {   

  Test test = new Test();   

  testsayHello("zhang san");   

  Systemoutprintln("int     --> " + testadd(10, 20));   

  Systemoutprintln("float   --> " + testgetFloat((float) 20123));   

  Systemoutprintln("double  --> " + testgetDouble(100369));   

  Systemoutprintln("boolean --> " + testgetBoolean(true));   

  Systemoutprintln("string  --> " + testgetString("wang Wu"));   

  

  String[] ss = { "hello", "-", "zhang", "san" };   

  Object[] obj = testgetStringArray(ss);   

  Systemoutprint("string[]-->  ");   

  for (Object object : obj) {   

   Systemoutprint(object + " ");   

  }   

  

 }   

  

}

1、接口定义确定MVCGET或者POST式

由于我整Web API平台基于MVC基础进行API发整Web API接口定义候般需要显示声明接口[>

对于本地函数

JNIEXPORT void JNICALL Java_video1_TestNative_sayHello(JNIEnv env, jobject obj)

{

cout<<"Hello Native Test !"<<endl;

}

JNIEnv类型代表Java环境。通过这个JNIEnv指针,就可以对Java端的代码进行 *** 作。如,创建Java类得对象,调用Java对象的方法,获取Java对象的属性等。

JNIEnv的指针会被JNI传送到本地方法的实现函数中来对Java端的代码进行 *** 作

JNIEnv类中的函数:

NewObject/NewString/New<TYPE>Array :new新对象

Get/Set<TYPE>Field:获取属性

Get/SetStatic<TYPE>Field :获取静态属性

Call<TYPE>Method/CallStatic<TYPE>Method

以上就是关于json对象的值为数组,怎么获取数组某项的值(注意不是json数组)全部的内容,包括:json对象的值为数组,怎么获取数组某项的值(注意不是json数组)、如何在c++中调用java代码、C# 用Newtonsoft.Json 修改 添加 JSON等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10080155.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存