gpt4 book ai didi

java - 在 Velocity 模板中迭代 JSONArray

转载 作者:行者123 更新时间:2023-12-01 15:13:15 24 4
gpt4 key购买 nike

我正在尝试在速度模板中迭代JSONArray但它不起作用我发现速度模板可以迭代集合、数组、 HashMap 对象任何人都可以帮助我迭代 JSONArray

提前致谢

最佳答案

您可以使用自定义 uberspector 来完成此操作。这使您可以自定义 Velocity 如何解释获取/设置/迭代器。

我最近对 ​​jsonlib 做了完全相同的事情。这是我的 super 观察员。

package util;

import java.util.Iterator;

import net.sf.json.JSONArray;

import org.apache.velocity.util.introspection.Info;
import org.apache.velocity.util.introspection.SecureUberspector;

/**
* Customized Velocity introspector. Used so that FML can iterate through JSON arrays.
*/
public class CustomUberspector extends SecureUberspector
{
@Override
@SuppressWarnings("rawtypes")
public Iterator getIterator(Object obj, Info i) throws Exception
{
if (obj instanceof JSONArray)
{
return new JsonArrayIterator((JSONArray) obj);
}
else
{
return super.getIterator(obj, i);
}
}
}

JsonArrayIterator 只是一个简单的数组迭代器。如果您使用不同的 JSON 库,只需自定义此类。

package util;

import java.util.Iterator;

import net.sf.json.JSONArray;
import net.sf.json.JSONException;

public class JsonArrayIterator implements Iterator<Object>
{
private final JSONArray array;
private int nextIndex;
private final int length;

public JsonArrayIterator(JSONArray array)
{
this.array = array;
nextIndex = 0;
length = array.size();
}

@Override
public boolean hasNext()
{
return nextIndex < length;
}

@Override
public Object next()
{
nextIndex++;
try
{
return array.get(nextIndex - 1);
}
catch (JSONException e)
{
throw new IllegalStateException(e);
}
}

@Override
public void remove()
{
throw new UnsupportedOperationException();
}


}

最后一步是在速度属性中指定 uberspector。

runtime.introspector.uberspect=util.CustomUberspector

关于java - 在 Velocity 模板中迭代 JSONArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12018892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com