2

CODAPPS と呼ばれる NetBeans 用のプラグインで Java を使用して、JSON データを取得、解析、および表示しています。

Google の Firebase データベースによって生成された JSON データを使用した例に従っていますが、代わりに SlashDB を使用しています。

[何らかの理由で、SlashDB からの JSON データは、それぞれおよびで始まり、 で終わり]ます。

次のエラーが表示されます。

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 データは次のようになります。

[
    {
        "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();

}
4

2 に答える 2

7

new JSONArray(responseInString)の代わりに使用しnew JSONObject(responseInString)ます。

于 2016-03-12T21:15:59.883 に答える
3

入力文字列 (responseInstring) は、 JSONオブジェクト自体ではなく、 JSON配列です。

この行を変更します。

JSONObject allSearchResultsAsJSON = new JSONObject(responseInString);

これになるには:

JSONArray allSearchResultsAsJSON = new JSONArray(responseInString);

この方法はJSONArrayではなくJSONObject専用でallSearchResultsAsJSONあるため、別の方法でインデックスを作成します。.names

于 2016-03-12T21:17:21.397 に答える