2016-03-21 59 views
0

我喜歡從下面JSON得到code值獲取的價值,但我得到一個錯誤象下面這樣: -如何從JSON使用Java

顯示java.lang.NullPointerException

我我得到一個錯誤在下面的代碼行

Iterator<String> iterator = companyList.iterator(); 

我有一個像下面的JSON對象: -

{ 
    "products": 
    { 
     "productsApp13": { 
      "code": "productsApp13", 
      "name": "productsApp13", 
      "attribute_set": "Apparel", 
      "product_type": "product", 
      "status": "active" 
      } 
    } 
} 

我的代碼: -

import org.junit.Before; 
import org.junit.Test; 

import com.fasterxml.jackson.databind.ObjectMapper; 

import static org.junit.Assert.*; 
import java.io.BufferedReader; 
import java.io.FileReader; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 


import org.json.simple.JSONArray; 
import org.json.simple.JSONObject; 
import org.json.simple.parser.JSONParser; 

try { 

       Object obj1 = parser.parse(new FileReader(path.directorypath)); 
       JSONObject jsonObject = (JSONObject) obj1; 

       String name = (String) jsonObject.get("products").toString(); 
       System.out.println("Testing Parse Value = "+name); 
       request.payload = name; 


       JSONArray companyList = (JSONArray) jsonObject.get("code"); 
       Iterator<String> iterator = companyList.iterator(); 
       while (iterator.hasNext()) { 
        System.out.println(iterator.next()); 
       } 

我知道productsApp13code關鍵不是一個數組,而我不能夠識別讀取此特定值的任何方法。

此外,我也想知道我怎麼可以修改這個值,我的有效載荷

+0

有什麼問題'((的JSONObject)((的JSONObject)jsonObject.get( 「產品」))獲得( 「productsApp13」))。獲得( 「代碼」)'? – Smutje

+0

它給了我一個錯誤..它不允許再次.get。 –

+0

請添加'JSONObject'的完全限定名稱,我使用了'wslite.json.JSONObject',並且可以通過強制轉換來完成此操作。 – Smutje

回答

0

代碼爲我工作: -

 FileReader reader = new FileReader(filePath); 

     JSONParser jsonParser = new JSONParser(); 
     JSONObject jsonObject = (JSONObject) jsonParser.parse(reader); 

     JSONObject jsonObject1 = (JSONObject) jsonObject.get("products"); 
     JSONObject jsonObject2 = (JSONObject)jsonObject1.get("productsApp15"); 
     String firstName = (String) jsonObject2.get("code").toString(); 
0

這個小例子,對我的作品:

import javax.json.Json; 
import javax.json.JsonObject; 
import javax.json.JsonReader; 
import javax.json.JsonValue; 
import java.io.StringReader; 

public class Main { 

    public static void main(String[] args) { 
     final JsonReader jsonReader = Json.createReader(new StringReader("{\n" + 
       " \"products\":\n" + 
       " {\n" + 
       "  \"productsApp13\": {\n" + 
       "   \"code\": \"productsApp13\",\n" + 
       "   \"name\": \"productsApp13\",\n" + 
       "   \"attribute_set\": \"Apparel\",\n" + 
       "   \"product_type\": \"product\",\n" + 
       "   \"status\": \"active\"\n" + 
       "   }\n" + 
       " }\n" + 
       "}")); 
     final JsonObject jsonObject = jsonReader.readObject(); 

     final JsonValue products = jsonObject.get("products"); 
     final JsonValue productsApp13 = ((JsonObject) products).get("productsApp13"); 
     final JsonValue code = ((JsonObject) productsApp13).get("code"); 

     System.out.println("code = " + code); // code = "productsApp13" 
    } 
} 

要到javax.json.*訪問我使用Maven依賴

<dependency> 
    <groupId>org.glassfish</groupId> 
    <artifactId>javax.json</artifactId> 
    <version>1.0.4</version> 
</dependency> 
+0

我得到一個java.lang.NullPointerException ..其實我從文件中獲取JSON對象不是來自JSON閱讀器。我已經通過我的文件在這裏..但它拋出錯誤最終JsonValue代碼=((JsonObject)productsApp13).get(「code」); ( –

+0

)我也通過System.out.println(「Checking Me =」+ productsApp13)檢查; –

+0

value id null null –

0

嘗試以下希望它解決您的問題

import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.net.URISyntaxException; 
import java.net.URL; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 

import org.json.JSONObject; 

public class Main { 
    public static void main(final String[] args) throws Exception { 

     final JSONObject jsonObject = new JSONObject(getResponseAsString(getFilePath())); 
     final JSONObject products = jsonObject.getJSONObject("products"); 

     final String name = products.toString(); 
     System.out.println("Testing Parse Value = " + name); 

     final JSONObject productsApp13 = products.getJSONObject("productsApp13"); 

     final String code = productsApp13.getString("code"); 

     System.out.println("code value : " + code); 

    } 

    private static Path getFilePath() throws URISyntaxException, FileNotFoundException { 
     URL url = Main.class.getClassLoader().getResource("jsonFile.txt"); 
     if (url == null) { 
      throw new FileNotFoundException(); 
     } 
     return Paths.get(url.toURI()); 
    } 

    private static String getResponseAsString(final Path filePath) throws FileNotFoundException, IOException { 
     return new String(Files.readAllBytes(filePath)); 
    } 
} 

Maven的依賴編譯上述

<dependency> 
     <groupId>org.json</groupId> 
     <artifactId>json</artifactId> 
     <version>20131018</version> 
    </dependency> 
+0

Reader org.glassfish.json。 JsonReaderImpl @ 3485923b javax.json.JsonException:解析JSON時出現I/O錯誤 –

+0

在我看來,你有無效的json文件,你可以驗證http://jsonlint.co上的json字符串M / –