java - 尝试从 JSON 文件读取时不断收到 java.lang.NullPointerException
问题描述
我正在尝试从 json 文件中读取数据,以便通过处理创建视觉图像。到目前为止,我的代码是:
public void generateShape(JSONObject file) {
//convert file to json object
JSONArray shapes = (JSONArray) file.get("shapes");
for (Object o : shapes) {
JSONObject json_shape = (JSONObject)o;
//getting shape id and function so we know which shapes to create
id = ((Number) json_shape.get("id")).intValue();
func = ((Number) json_shape.get("func")).intValue();
animate = ((Number) json_shape.get("animate")).intValue();
stroke_weight = ((Number) json_shape.get("stroke_weight")).floatValue();
JSONArray strokes = (JSONArray) json_shape.get("stroke");
Iterator<Float> iterator = strokes.iterator();
index = 0;
while(iterator.hasNext())
{
stroke[index] = ((Number)iterator.next()).floatValue();
index++;
}
stoke[] 是一个浮点数组,用于控制笔画的颜色。我解析的json文件是
{
"shapes": [
{
"id":0,
"func":1,
"stroke":[143,50,200],
"stroke_weight": 70,
"animate": 1,
"jelly_func": 5,
"points":[268,330,400,333,74,210,90,300]
}
]
}
我在线上遇到错误:
stroke[index] = ((Number)iterator.next()).floatValue();
我正在使用 json.simple 库,我看到的所有解决方案都是针对 org.json 库的
我可以硬编码笔画数组中的值,但我想尝试迭代。任何提示/指导?
完整的堆栈跟踪是
java.lang.NullPointerException
at ImageLoader.generateShape(ImageLoader.java:35)
at Sketch.setup(Sketch.java:48)
at processing.core.PApplet.handleDraw(PApplet.java:2404)
at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1557)
at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:313)
草图是:
ImageLoader image = new ImageLoader();
JSONParser parser = new JSONParser();
try {
JSONObject file = (JSONObject) parser.parse((new FileReader("save_data.json")));
image.generateShape(file);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
eta:好的,所以在删除导致异常的行并检查我的 json 值是否被读取时,我可以确认正在解析的值是正确的,当我将它们打印到控制台时。我现在需要把它们放在一个数组中
解决方案
我仍然认为你没有正确初始化数组......你可以试试这段代码,看看它是否有效?
public void generateShape(JSONObject file) {
// convert file to json object
JSONArray shapes = (JSONArray) file.get("shapes");
for (Object o : shapes) {
JSONObject json_shape = (JSONObject) o;
// getting shape id and function so we know which shapes to create
int id = ((Number) json_shape.get("id")).intValue();
int func = ((Number) json_shape.get("func")).intValue();
int animate = ((Number) json_shape.get("animate")).intValue();
float stroke_weight = ((Number) json_shape.get("stroke_weight")).floatValue();
JSONArray strokes = (JSONArray) json_shape.get("stroke");
Iterator<Float> iterator = strokes.iterator();
int index = 0;
float[] stroke = new float[strokes.size()];
while (iterator.hasNext()) {
stroke[index] = ((Number) iterator.next()).floatValue();
index++;
}
}
}
推荐阅读
- tcl - 如何在 Synopsys DVE 下运行的 Tcl 脚本中打印(放入日志)信号值?
- html - 移动只有相等的css-float div之间的空白空间
- r - R中的模糊外连接/合并
- outlook - 桌面 Outlook 插件登录问题 - 13003“不支持用户身份类型”
- android - 我自己的库中依赖项的 api 或实现?
- c# - UWP 绑定到 ConverterParameter 不起作用
- spring-mvc - 源服务器没有找到目标的当前表示或不愿意透露存在
- python - 如何根据当前行的条件获取熊猫 GroupedBy Dataframe 的前几行?
- ios - 错误 - 顶层不允许使用表达式
- android - Android Firebase 获取数据库中的最后一个按键