You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js接口返回无数组名JSON,如何添加数组名适配Android Spinner?

修改Node.js接口返回带数组名的JSON结构适配Android Spinner

问题背景

你现在用Node.js写接口从MSSQL的ItemSetting_tbl表查询item数据,当前接口返回的是无外层键名的JSON数组,虽然已经通过Android端Volley的JsonArrayRequest完成了适配,但希望修改Node.js代码,让接口返回带Spinner数组名的JSON结构(比如{"Spinner": [{"item": "WATER"}, ...]})。


当前Node.js接口输出

Node.js接口返回的用于Android Spinner展示的查询结果

[ { "item": "WATER" }, { "item": "DFG" }, { "item": "2InchPipe" }, { "item": "5InchPipe" } ]

当前Node.js核心代码

从MSSQL获取数据的Node.js代码

// GET ITEM DROP DOWN INFO
app.get("/api/user/spinner", function(req , res){ 
  var query = "select item from ItemSetting_tbl "; 
  executeQuery (res, sendname); 
});

修改方案

核心思路是把查询得到的数组包裹在一个包含Spinner键的对象中再返回。需要调整处理查询结果的回调逻辑(也就是你的sendname函数,这个函数应该是executeQuery用来返回数据的回调):

假设你的sendname函数原本是直接返回查询结果数组:

// 原sendname函数(示例)
function sendname(res, queryResult) {
  res.json(queryResult); // 直接返回数组
}

修改成:

// 修改后的sendname函数
function sendname(res, queryResult) {
  // 将数组包裹到带Spinner键的对象里
  res.json({ Spinner: queryResult });
}

如果你的executeQuery是直接在接口里处理结果,也可以直接在路由回调里调整:

app.get("/api/user/spinner", function(req , res){ 
  var query = "select item from ItemSetting_tbl "; 
  // 假设executeQuery的回调是直接拿到结果
  executeQuery(query, function(err, result) {
    if (err) {
      res.status(500).json({ error: err.message });
      return;
    }
    // 包裹成目标结构返回
    res.json({ Spinner: result });
  });
});

修改后预期输出

期望返回带数组名的JSON结构

{ "Spinner": [ { "item": "WATER" }, { "item": "DFG" }, { "item": "2InchPipe" }, { "item": "5InchPipe" } ] }

(可选)Android端对应调整

如果后续要适配新的接口结构,需要把JsonArrayRequest改成JsonObjectRequest,解析时先拿到Spinner对应的数组:

JsonObjectRequest request = new JsonObjectRequest(URL, null, 
    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
                JSONArray spinnerArray = response.getJSONArray("Spinner");
                // 后续解析逻辑和之前一致
                for (int i = 0; i < spinnerArray.length(); i++) {
                    JSONObject obj = spinnerArray.getJSONObject(i);
                    String item = obj.getString("item");
                    CountryName.add(item);
                }
                spinner.setAdapter(new ArrayAdapter<String>(MainActivity.this, 
                    android.R.layout.simple_spinner_dropdown_item, CountryName));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, 
    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            // 错误处理
        }
    });

MySingleton.getmInstance(MainActivity.this).addToRequestQue(request);

内容的提问来源于stack exchange,提问作者Shabek Mahmood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:55:48