如何从 json(url) 解析数据并将数据发送到 url

Posted

技术标签:

【中文标题】如何从 json(url) 解析数据并将数据发送到 url【英文标题】:How to parse data from json(url) and send data to url 【发布时间】:2019-10-21 14:56:37 【问题描述】:

我正在尝试将数据发送到解析 json 数据的 url,我想知道如果我们从 myjson.com 创建随机 json 存储,我们是否可以编辑 url 中的 json 数据,或者我们必须维护自己的服务器进行编辑json 数据。在这里我创建了随机 json 存储,我正在从该 url 解析数据,我还想编辑 url 中的数据,这是我无法做到的问题。它不工作。请帮忙??? 这是结构

["name":"pavan","hit":true]

这是 fetchdata 在后台执行的主要活动代码

public class MainActivity extends AppCompatActivity 

    Button click;
    public static TextView data;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        click=(Button)findViewById(R.id.button);
        data=(TextView)findViewById(R.id.fetcheddata);
        click.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 

                fetchdata process=new fetchdata();
                process.execute();
            
        );


    

这是 fetchdata 类,用于从 url 获取数据并显示在 mainactivity 的文本视图中

public class fetchdata extends AsyncTask<Void,Void,Void> 
    String data="";
    String dataparsed="";
    String singleparsed="";
    boolean flag=false;
    @Override
    protected Void doInBackground(Void... params) 

        try 
            URL url=new URL("https://api.myjson.com/bins/1854yb");
            HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
            InputStream inputStream=httpURLConnection.getInputStream();
            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
            String line="";
            while (line!=null)
            
                line=bufferedReader.readLine();
                data=data+line;
            
            JSONArray JA=new JSONArray(data);
            for(int i=0;i<JA.length();i++)
            
                JSONObject JO= (JSONObject) JA.get(i);
                singleparsed="Name:"+JO.get("name")+"\n"+"Feed key:"+JO.get("hit");
                dataparsed=dataparsed+singleparsed;
            


         catch (MalformedURLException e) 
            e.printStackTrace();
         catch (IOException e) 
            e.printStackTrace();
         catch (JSONException e) 
            e.printStackTrace();
        

        return null;
    

    @Override
    protected void onPostExecute(Void result) 

        super.onPostExecute(result);
        MainActivity.data.setText(this.dataparsed);
        JSONObject postData = new JSONObject();
        try 
            postData.put("name","sai");
            postData.put("hit", false);

            new senddata().execute("https://api.myjson.com/bins/1854yb", postData.toString());
         catch (JSONException e) 
            e.printStackTrace();
        


    

这是从正在执行的 fetchdata 的 postexecute 向 url 代码发送数据,并且 url 中没有发生任何事情,请帮助我从 3 天开始处理这个问题

public class senddata extends AsyncTask<String,Void, String> 

    String data="";
    String dataparsed="";
    String singleparsed="";
    boolean flag=false;

    @Override
    protected String doInBackground(String... params) 

        String data = "";
        HttpURLConnection httpURLConnection = null;
        try 

            httpURLConnection = (HttpURLConnection) new URL(params[0]).openConnection();
            httpURLConnection.setRequestMethod("POST");

            httpURLConnection.setDoOutput(true);

            DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream());
            wr.writeBytes("PostData=" + params[1]);
            wr.flush();
            wr.close();

            InputStream in = httpURLConnection.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(in);

            int inputStreamData = inputStreamReader.read();
            while (inputStreamData != -1) 
                char current = (char) inputStreamData;
                inputStreamData = inputStreamReader.read();
                data += current;
            
            dataparsed=data;

         catch (Exception e) 
            e.printStackTrace();
         finally 
            if (httpURLConnection != null) 
                httpURLConnection.disconnect();
            
        

        return data;
    
    @Override
    protected void onPostExecute(String result) 

        super.onPostExecute(result);
        Log.e("TAG", result);



    


【问题讨论】:

为什么你对 fetchdata 和 senddata 使用相同的 api url? 尝试检查 Postman 中的 senddata api。我得到 404 状态码,所以可能是后端有问题 是的,我在 fetchdata(从 api 获取数据)和 senddata(在同一个 api 中编辑数据)中使用相同的 api,并且我们需要自己的服务器进行编辑 【参考方案1】:

此 api 不接受其 url 后面的任何参数。 这是一个 get 方法 Api url 而不是 post 方法。尝试在 postman 的 post 方法中运行它,它会报错。 如果你在 get 方法中运行,它会产生相同的输出,即使你在 url 之后添加一些东西:-“https://api.myjson.com/bins/1854yb”

【讨论】:

【参考方案2】:

我认为您在创建 api 时对 myJson 有一些问题。如果你是 android 的初学者,你也可以试试Link for ready made Api for Android

他们创建了不同类型的 API 来理​​解 json 概念。

还可以获取有关 PostMan Link for postman 的一些更新

【讨论】:

以上是关于如何从 json(url) 解析数据并将数据发送到 url的主要内容,如果未能解决你的问题,请参考以下文章

如何拆分/解析 JSON 数据并将其保存到 SQL 服务器中?

如何在 Swift 3 中解析来自 URL 的 JSON 数据

如何从 url 获取 json 数据并将其保存到 const 变量 [TypeScript]

我想将图像 URL 作为 json 数据上传到我的 Angular 表单并将其发送到服务器。图片 URL 来自服务器响应

如何解析 JSON 并访问结果

如何在 obj-c 中解析动态 json 数据?