读取以[并以]结尾的JSON数据 [英] Reading JSON data that begins with [ and ends with ]
本文介绍了读取以[并以]结尾的JSON数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用带有NetBeans插件的Java,称为CODAPPS来检索,解析和显示JSON数据。
I'm using Java with a plugin for NetBeans called CODAPPS to retrieve, parse, and display JSON data.
我正在关注使用JSON数据的示例由Google的Firebase数据库生成,但我使用的是SlashDB。
I'm following an example that used JSON data produced by Google's Firebase database, but I'm using SlashDB instead.
由于某种原因,来自SlashDB的JSON数据以开始和结束[分别为code>和
]
。
For some reason the JSON data from SlashDB begins and ends with [
and ]
, respectively.
我收到以下错误:
org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
at org.json.JSONTokener.syntaxError(JSONTokener.java:433)
at org.json.JSONObject.<init>(JSONObject.java:198)
at org.json.JSONObject.<init>(JSONObject.java:325)
at userclasses.StateMachine.onMain_ButtonAction(StateMachine.java:80)
at generated.StateMachineBase.handleComponentAction(StateMachineBase.java:572)
at com.codename1.ui.util.UIBuilder$FormListener.actionPerformed(UIBuilder.java:2831)
at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:345)
at com.codename1.ui.Button.fireActionEvent(Button.java:411)
at com.codename1.ui.Button.released(Button.java:442)
at com.codename1.ui.Button.pointerReleased(Button.java:530)
at com.codename1.ui.Form.pointerReleased(Form.java:2578)
at com.codename1.ui.Form.pointerReleased(Form.java:2514)
at com.codename1.ui.Component.pointerReleased(Component.java:3119)
at com.codename1.ui.Display.handleEvent(Display.java:2017)
at com.codename1.ui.Display.edtLoopImpl(Display.java:1065)
at com.codename1.ui.Display.mainEDTLoop(Display.java:994)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
Picked up _JAVA_OPTIONS: -Xmx4G
BUILD SUCCESSFUL (total time: 15 seconds)
我的JSON数据看起来像这个:
My JSON data looks like this:
[
{
"description": "Example Fast Festival Motorcycle with Boho Beading",
"title": "Example Fast Festival Motorcycle with Boho Beading",
"price": "$154.00",
"pic": "http://images.example-media.com/inv/media/3/8/8/8/5068883/print/image1xxl.jpg",
"pic2": "http://images.example-media.com/inv/media/3/8/8/8/5068883/image2s.jpg",
"pic3": "http://images.example-media.com/inv/media/3/8/8/8/5068883/image3s.jpg",
"title_lower": "example glam festival motorcycle with boho beading",
"desc_lower": "example glam festival motorcycle with boho beading"
},
{
"description": "Example BIG Fast Festival Body-Conscious Motorcycle with Cut Out Detail",
"title": "Example BIG Fast Festival Body-Conscious Motorcycle with Cut Out Detail",
"price": "$50.00",
"pic": "http://images.example-media.com/inv/media/9/8/2/8/5118289/print/image1xxl.jpg",
"pic2": "http://images.example-media.com/inv/media/9/8/2/8/5118289/image2s.jpg",
"pic3": "http://images.example-media.com/inv/media/9/8/2/8/5118289/image3s.jpg",
"title_lower": "example petite glam festival body-conscious motorcycle with cut out detail",
"desc_lower": "example petite glam festival body-conscious motorcycle with cut out detail"
},
{
"description": "Example USED Premium Ultra Fast Fishtail Maxi Motorcycle",
"title": "Example USED Premium Ultra Fast Fishtail Maxi Motorcycle",
"price": "$67.00",
"pic": "http://images.example-media.com/inv/media/4/2/7/1/4571724/red/image1xxl.jpg",
"pic2": "http://images.example-media.com/inv/media/4/2/7/1/4571724/image2s.jpg",
"pic3": "http://images.example-media.com/inv/media/4/2/7/1/4571724/image3s.jpg",
"title_lower": "example red carpet premium scuba ultra glam fishtail maxi motorcycle",
"desc_lower": "example red carpet premium scuba ultra glam fishtail maxi motorcycle"
}
]
抛出错误的代码块是:
@Override
protected void onMain_ButtonAction(Component c, ActionEvent event) {
int pageNumber = 1;
ConnectionRequest r = new ConnectionRequest();
r.setUrl("http://myIP/query/basic_search/query/motorcycle.json?limit=41");
r.setPost(false);
r.setHttpMethod("GET");
r.setContentType("application/json");
NetworkManager.getInstance().addToQueueAndWait(r);
ByteArrayInputStream allSearchResultsInBytes = new ByteArrayInputStream(r.getResponseData());
String responseInString = null;
try {
responseInString = Util.readToString(allSearchResultsInBytes, "UTF-8");
} catch (IOException ex) {
//Logger.getLogger(StateMachine.class.getName()).log(Level.SEVERE, null, ex);
}
JSONObject allSearchResultsAsJSON = new JSONObject(responseInString);
JSONArray listOfResultIds = allSearchResultsAsJSON.names();
Form wallScreen = c.getComponentForm();
Container myContainerForAllSearchResults = new Container();
Layout myLayout = new BoxLayout(BoxLayout.Y_AXIS);
myContainerForAllSearchResults.setLayout(myLayout);
Integer counter = 0;
while (counter < allSearchResultsAsJSON.length()) {
String id = listOfResultIds.getString(counter);
JSONObject oneSearchResultAsJSON = (JSONObject) allSearchResultsAsJSON.get(id);
Container mySearchResultContainer = new Container();
String motorcyclePrice = oneSearchResultAsJSON.getString("price");
String motorcycleDesc = oneSearchResultAsJSON.getString("description");
String motorcycleTitle = oneSearchResultAsJSON.getString("title");
String motorcyclePic = oneSearchResultAsJSON.getString("pic");
Label myLabelForPic = new Label(motorcyclePic);
Label myLabelForPrice = new Label(motorcyclePrice);
Label myLabelForTitle = new Label(motorcycleTitle);
Label myLabelForDesc = new Label(motorcycleDesc);
mySearchResultContainer.addComponent(myLabelForPrice);
mySearchResultContainer.addComponent(myLabelForTitle);
mySearchResultContainer.addComponent(myLabelForDesc);
mySearchResultContainer.addComponent(myLabelForPic);
myContainerForAllSearchResults.addComponent(mySearchResultContainer);
counter = counter + 1;
}
wallScreen.addComponent(wallScreen.getComponentCount(), myContainerForAllSearchResults);
wallScreen.revalidate();
}
推荐答案
使用 new JSONArray(responseInString)
而不是 new JSONObject(responseInString)
。
这篇关于读取以[并以]结尾的JSON数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文