将Java列表转换为Javascript数组
我的Android应用程序中有以下java代码,希望找到一种将java列表转换为可在javascript中使用的数组的方法: 爪哇:将Java列表转换为Javascript数组,java,javascript,android,arrays,list,Java,Javascript,Android,Arrays,List,我的Android应用程序中有以下java代码,希望找到一种将java列表转换为可在javascript中使用的数组的方法: 爪哇: public void未完成(列出用户、响应){ 对于(int i=0;i
public void未完成(列出用户、响应){
对于(int i=0;i
Javascript:
//this is how I want to be able to use the object in Javascript
function parseFriends(usersObjectFromJava){
var users = [];
for (var i = 0; i < usersObjectFromJava.length; i++) {
var u = {
Id: usersObjectFromJava[i].id + "",
UserName: usersObjectFromJava[i].username,
FirstName: usersObjectFromJava[i].first_name,
LastName: usersObjectFromJava[i].last_name,
};
users[i] = u;
}
}
//这就是我希望能够在Javascript中使用对象的方式
函数parseFriends(usersObjectFromJava){
var用户=[];
for(var i=0;i
有人能帮我用Java代码创建usersObjectFromJava,以便在javascript中使用吗?这只是一个例子,首先添加javascript接口。它将成为javascript和java代码之间的桥梁。 addJavascriptInterface(新的JSInterface(),“interface”) 在javascript中,您可以这样添加
"window.interface.setPageCount(pageCount1);"
接口是java和javascript之间的共同关键字。创建一个类JSInterace并定义一个方法setPageCount(intA)。脚本将返回一个值,您可以在java方法中使用该值 爪哇: 您必须稍微更改Java代码(即使用公共getter或向
JSONObjects
添加更多/更少的信息)。
默认情况下,JSON
包含在Android中,因此不需要外部库
我希望我理解你的问题
我遇到的一件小事:你在Java中使用
fetchFriends
,但在Javascript中它被称为parseFriends
,我将它们重命名为fetchFriends
你可以使用Google Gson库()将Java列表对象转换为JSON。确保设置了正确的字段,如ID、用户名、名字等,并且在Java脚本端设置了相同的代码。使用
要将java对象转换为JSON字符串,可以通过
Gson gson = new Gson();
TestObject o1 = new TestObject("value1", 1);
TestObject o2 = new TestObject("value2", 2);
TestObject o3 = new TestObject("value3", 3);
List<TestObject> list = new ArrayList<TestObject>();
list.add(o1);
list.add(o2);
list.add(o3);
Gson-Gson=new-Gson();
TestObject o1=新的TestObject(“值1”,1);
TestObject o2=新的TestObject(“值2”,2);
TestObject o3=新的TestObject(“值3”,3);
列表=新的ArrayList();
添加(o1);
添加(o2);
添加(o3);
toJson(list)将为您提供
[{“prop1”:“value1”,“prop2”:2},{“prop1”:“value2”,“prop2”:2},{“prop1”:“value3”,“prop2”:3}]
现在您可以使用JSON.parse(),将JSON反序列化为Javascript对象。您可以使用Gson库
Gson gson = new GsonBuilder().create();
JsonArray jsonArray = gson.toJsonTree(your_list, TypeClass.class).getAsJsonArray();
使用Jackson。
您需要向要传递的POJO的每个属性添加“@JsonProperty”注释,然后执行以下操作:
String respStr = "";
for(Object whatever: MyList)
{
JSONObject dato = new JSONObject();
dato.put("FirstField", whatever.SomeData());
dato.put("SecondField", whatever.SomeData2());
StringEntity entity = new StringEntity(dato.toString());
post.setEntity(entity);
webView.loadUrl("javascript:fetchFriends("+entity+")");
}
我不确定为什么没有提到关于
jaxb
的答案。我只是在想jaxb
很适合解决这类问题
对于带注释的jaxb
类的示例样式,请查找以下内容
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class ResponseAsList {
private List < Object > list = new ArrayList < Object > ();
public ResponseAsList() {
// private default constructor for JAXB
}
public List < Object > getList() {
return list;
}
public void setList(List < Object > list) {
this.list = list;
}
}
import java.util.ArrayList;
导入java.util.List;
导入javax.xml.bind.annotation.XmlAccessType;
导入javax.xml.bind.annotation.XmlAccessorType;
导入javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
公共类响应列表{
私有列表<对象>列表=新的ArrayList<对象>();
公众回应名单(){
//JAXB的私有默认构造函数
}
公共列表
您将在这些列表中填充数据,并在
xml
或json
中进行marshall
处理。向客户端获取json
后,您可以执行var myArray=json.parse(响应);
…虽然我通常主张使用GSON或Jackson之类的工具为您进行JSON转换,但如果您处于有限的环境(如Android)中,并且不想捆绑一堆依赖项,那么您可以很容易地进行JSON转换
public class JsonHelper {
public static String convertToJSON(List<GraphUser> users) {
StringBuilder sb = new StringBuilder();
for (GraphUser user : users) {
sb.append(convertToJSON(user));
}
return sb.toString();
}
public static String convertToJSON(GraphUser user) {
return new StringBuilder()
.append("{")
.append("\"id\":").append(user.getId()).append(",")
.append("\"admin\":").append(user.isAdmin() ? "true" : "false").append(",")
.append("\"name\":\"").append(user.getName()).append("\",")
.append("\"email\":\"").append(user.getEmail()).append("\"")
.append("}")
.toString();
}
}
public类JsonHelper{
公共静态字符串convertToJSON(列出用户){
StringBuilder sb=新的StringBuilder();
for(GraphUser用户:用户){
sb.append(convertToJSON(user));
}
使某人返回字符串();
}
公共静态字符串convertToJSON(GraphUser用户){
返回新的StringBuilder()
.append(“{”)
.append(“\”id\“:”).append(user.getId()).append(“,”)
.append(“\'admin\”:”).append(user.isAdmin()?“true”:“false”).append(“,”)
.append(“\”名称:\”).append(user.getName()).append(“\”,”)
.append(“\”email\:\”).append(user.getEmail()).append(“\”)
.append(“}”)
.toString();
}
}
如果愿意,您可以在GraphUser
上创建toJSON()
方法来放置逻辑。或者使用可注入的json帮助程序库而不是静态方法(我会)。或任何数量的其他抽象。许多开发人员更喜欢将模型对象的表示分离到他们自己的对象中,包括我自己。就个人而言,如果我想避免依赖性,我可能会这样建模:
与方法接口封送器
和T marshall(F obj)
F unmarshall(T obj)
接口JsonMarshaller扩展了Marshaller
类GraphUserShaller实现JsonMarshaller
,它可以执行类型检查或使用访问者模式或其他方法来确定表示这种类型对象集合的最佳方式类GraphUserCollectionMarshaller实现JsonMarshaller
String respStr = "";
for(Object whatever: MyList)
{
JSONObject dato = new JSONObject();
dato.put("FirstField", whatever.SomeData());
dato.put("SecondField", whatever.SomeData2());
StringEntity entity = new StringEntity(dato.toString());
post.setEntity(entity);
webView.loadUrl("javascript:fetchFriends("+entity+")");
}
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class ResponseAsList {
private List < Object > list = new ArrayList < Object > ();
public ResponseAsList() {
// private default constructor for JAXB
}
public List < Object > getList() {
return list;
}
public void setList(List < Object > list) {
this.list = list;
}
}
public class JsonHelper {
public static String convertToJSON(List<GraphUser> users) {
StringBuilder sb = new StringBuilder();
for (GraphUser user : users) {
sb.append(convertToJSON(user));
}
return sb.toString();
}
public static String convertToJSON(GraphUser user) {
return new StringBuilder()
.append("{")
.append("\"id\":").append(user.getId()).append(",")
.append("\"admin\":").append(user.isAdmin() ? "true" : "false").append(",")
.append("\"name\":\"").append(user.getName()).append("\",")
.append("\"email\":\"").append(user.getEmail()).append("\"")
.append("}")
.toString();
}
}