Android中根据userid和scripcode更新JSONArray的JSONObject
问题描述
我拥有两个JSONArray,分别为http和websocketjsonArray,需要实现以下需求:通过嵌套循环判断,当两个数组中的JSONObject的userid和scripcode字段均相同时,将websocketjsonArray中的数据(如bfqty字段)更新到http数组对应的JSONObject中。
尝试实现的代码
public class MainActivity extends AppCompatActivity { private JSONArray http; private JSONArray websocketjsonArray; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { http = new JSONArray("[{\"userid\":\"CNRM04\",\"groupname\":\"Rohit\",\n" + "\"segment\":\"CosPROFIN\",\"accountcode\":\"OWN\",\"symbol\":\"NIFTY\",\"exchange\":\"NSEFO\",\n" + "\"expirydate\":\"03NOV2022\",\"scripcode\":\"38021\",\"securitytype\":\"OPT\",\n" + "\"strikeprice\":17700,\"opttype\":\"PE\",\"bfqty\":-1500,\"bfrate\":122.35,\n" + "\"bfamt\":18352.5,\"buyqty\":0,\"sellqty\":0,\"netqty\":0,\"cfqty\":-150,\n" + "\"cfamt\":18352.5,\"ltp\":0,\"grossmtm\":0,\"brokerageamt\":0,\"netmtm\":0,\n" + "\"currency\":\"INR\",\"usdrate\":1,\"clientsharing\":0,\"broksharing\":0,\n" + "\"comsharing\":100,\"multiplier\":1},{\"userid\":\"CNRM04\",\"groupname\":\"Rohit\",\n" + "\"segment\":\"CosPROFIN\",\"accountcode\":\"OWN\",\"symbol\":\"NIFTY\",\n" + "\"exchange\":\"NSEFO\",\"expirydate\":\"03NOV2022\",\"scripcode\":\"38026\",\n" + "\"securitytype\":\"OPT\",\"strikeprice\":17800,\"opttype\":\"PE\",\"bfqty\":0,\n" + "\"bfrate\":0,\"bfamt\":0,\"buyqty\":10800,\"sellqty\":15000,\"netqty\":-4200,\n" + "\"cfqty\":-4200,\"cfamt\":590729.9999999998,\"ltp\":0,\"grossmtm\":0,\n" + "\"brokerageamt\":3400.2888479999992,\"netmtm\":0,\"currency\":\"INR\",\n" + "\"usdrate\":1,\"clientsharing\":0,\"broksharing\":0,\"comsharing\":100,\n" + "\"multiplier\":11},{\"userid\":\"CNC01\",\"groupname\":\"abhishek\",\n" + "\"segment\":\"Cosmic\",\"accountcode\":\"APP\",\"symbol\":\"NIFTY\",\n" + "\"exchange\":\"NSEFO\",\"expirydate\":\"03NOV2022\",\"scripcode\":\"40034\",\n" + "\"securitytype\":\"OPT\",\"strikeprice\":1200,\"opttype\":\"PE\",\"bfqty\":12,\n" + "\"bfrate\":2,\"bfamt\":0,\"buyqty\":100,\"sellqty\":121,\"netqty\":200,\n" + "\"cfqty\":11,\"cfamt\":78,\"ltp\":9,\"grossmtm\":0,\"brokerageamt\":12222,\n" + "\"netmtm\":45,\"currency\":\"INR\",\"usdrate\":2,\"clientsharing\":0,\"broksharing\":0,\"comsharing\":0,\n" + "\"multiplier\":99}]"); System.out.println("http " + http); websocketjsonArray = new JSONArray("[{\"userid\":\"CNRM04\",\"groupname\":\"Rohit\",\"segment\":\"CosPROFIN\",\"accountcode\":\"OWN\",\"symbol\":\"NIFTY\",\"exchange\":\"NSEFO\",\"expirydate\":\"03NOV2022\",\"scripcode\":\"38021\",\"securitytype\":\"OPT\",\"strikeprice\":17700,\"opttype\":\"PE\",\"bfqty\":20,\"bfrate\":122.35,\"bfamt\":18352.5,\"buyqty\":0,\"sellqty\":0,\"netqty\":0,\"cfqty\":-150,\"cfamt\":18352.5,\"ltp\":0,\"grossmtm\":0,\"brokerageamt\":0,\"netmtm\":0,\"currency\":\"INR\",\"usdrate\":1,\"clientsharing\":0,\"broksharing\":0,\"comsharing\":100,\"multiplier\":1},{\"userid\":\"CNRM04\",\"groupname\":\"Rohit\",\"segment\":\"CosPROFIN\",\"accountcode\":\"OWN\",\"symbol\":\"NIFTY\",\"exchange\":\"NSEFO\",\"expirydate\":\"03NOV2022\",\"scripcode\":\"38026\",\"securitytype\":\"OPT\",\"strikeprice\":17800,\"opttype\":\"PE\",\"bfqty\":30,\"bfrate\":0,\"bfamt\":0,\"buyqty\":10800,\"sellqty\":15000,\"netqty\":-4200,\"cfqty\":-4200,\"cfamt\":590729.9999999998,\"ltp\":0,\"grossmtm\":0,\"brokerageamt\":3400.2888479999992,\"netmtm\":0,\"currency\":\"INR\",\"usdrate\":1,\"clientsharing\":0,\"broksharing\":0,\"comsharing\":100,\"multiplier\":1}]]"); System.out.println("websocketarray " + websocketjsonArray); for (int k = 0; k < websocketjsonArray.length(); k++) { for (int l = 0; l < http.length(); l++) { if (http.getJSONObject(l).getString("scripcode").equalsIgnoreCase(websocketjsonArray.getJSONObject(k).getString("scripcode")) && http.getJSONObject(l).getString("userid").equalsIgnoreCase(websocketjsonArray.getJSONObject(k).getString("userid"))) { String g = websocketjsonArray.getJSONObject(l).getString("bfqty"); http.put(Integer.parseInt("0"),""+g); } System.out.println("gfgfgf " +http); } } } catch (JSONException e) { e.printStackTrace(); } } }
预期结果
匹配userid和scripcode的JSONObject的bfqty字段会被websocketjsonArray中的对应值替换,例如userid=CNRM04且scripcode=38021的JSONObject的bfqty从-1500更新为20,userid=CNRM04且scripcode=38026的bfqty从0更新为30,未匹配的JSONObject保持原有数据不变,预期输出如下:
[{"userid":"CNRM04","groupname":"Rohit","segment":"CosPROFIN","accountcode":"OWN","symbol":"NIFTY","exchange":"NSEFO", "expirydate":"03NOV2022","scripcode":"38021","securitytype":"OPT","strikeprice":17700,"opttype":"PE","bfqty":20,"bfrate":122.35,"bfamt":18352.5,"buyqty":0,"sellqty":0, "netqty":0,"cfqty":-150, "cfamt":18352.5,"ltp":0,"grossmtm":0,"brokerageamt":0,"netmtm":0,"currency":"INR","usdrate":1,"clientsharing":0,"broksharing":0,"comsharing":100,"multiplier":1}, {"userid":"CNRM04","groupname":"Rohit","segment":"CosPROFIN","accountcode":"OWN","symbol":"NIFTY","exchange":"NSEFO","expirydate":"03NOV2022", "scripcode":"38026","securitytype":"OPT","strikeprice":17800,"opttype":"PE","bfqty":30,"bfrate":0,"bfamt":0,"buyqty":10800,"sellqty":15000,"netqty":-4200, "cfqty":-4200,"cfamt":590729.9999999998,"ltp":0,"grossmtm":0,"brokerageamt":3400.2888479999992,"netmtm":0,"currency":"INR", "usdrate":1,"clientsharing":0,"broksharing":0,"comsharing":100,"multiplier":11},{"userid":"CNC01","groupname":"abhishek", "segment":"Cosmic","accountcode":"APP","symbol":"NIFTY","exchange":"NSEFO","expirydate":"03NOV2022","scripcode":"40034","securitytype":"OPT", "strikeprice":1200,"opttype":"PE","bfqty":12,"bfrate":2,"bfamt":0,"buyqty":100,"sellqty":121,"netqty":200,"cfqty":11,"cfamt":78,"ltp":9, "grossmtm":0,"brokerageamt":12222,"netmtm":45,"currency":"INR","usdrate":2,"clientsharing":0,"broksharing":0,"comsharing":0,"multiplier":99}]
内容的提问来源于stack exchange,提问作者Abhishek
相关产品推荐
相关产品推荐

