How to get this data in json fromat? - android

I got this data in PayUMoney and to show the user But problem how to get this data in json or key value pair format any one know that please help!!
addedon=2019-11-21+17%3A06%3A42&productinfo=FINE&firstname=Creataum+Test+User&

Assuming that u have got it as String following code will print the key value pair from the string
String x ="addedon=2019-11-21+17%3A06%3A42&productinfo=FINE&firstname=Creataum+Test+User&";
String pair[] = x.split("&");
Log.e("pairs", Arrays.asList(pair).toString());
for (int i=0;i<pair.length;i++){
String key[] = pair[i].split("=");
Log.e("pair:","key= "+ key[0]+" value= "+key[1]);
}

It seems the string is both URL encoded (the %3A) and JSON encoded (the &).
You have to decode the string and then split by '&' and then split each pair to key and value by '='.
You can see here how to JSON decode: Decoding JSON String in Java
URL decoding can be done with Java's URLDecoder class: https://docs.oracle.com/javase/7/docs/api/java/net/URLDecoder.html
For this example I'll just assume the only encoded characters are %3A and &.
String payumoney = "addedon=2019-11-21+17%3A06%3A42&productinfo=FINE&firstname=Creataum+Test+User&";
// String decoding.
payumoney = payumoney.replaceAll("%3A", "-");
payumoney = payumoney.replaceAll("&", "&");
HashMap<String, String> params = new HashMap<String, String>();
String[] pairs = payumoney.split("&");
for (String pair : pairs) {
String[] keyValue = pair.split("=");
params.put(keyValue[0], keyValue[1]);
}

This looks like a String with mixture of URL encoding (like %3A for :) and HTML characters (like & for &).
I believe you can try decoding it and then split data like say by & to get data for each key and then further split by = to get value for that key.
For URL decoding you can try like
String decoded = java.net.URLDecoder.decode(url, "UTF-8");

You can simply use String replaceAll() function to create the json.
str= str.replaceAll("=", "\"");
str= str.replaceAll("&", "\",\"");
str= "{\""+ str+ "\"}";

Related

Android - convert json string to JSONObject without removing the escaped characters [duplicate]

This question already has answers here:
conversion from string to JSON object Android
(9 answers)
Closed 5 years ago.
I convert json string to JSONObject using JSONObject jsonObject = new JSONObject(jsonString); And the convert jsonObject to Java Object using gson
But it gives an error when a json attribute value contains quotes,
like , { "length" : "10"" } (its, 10 inches)
Edit :
i get data from server api in following manner :
"{\"data\":\"10\"\"}"
i replace \" by ", and which converts into { "data" : "10"" }
this gives exception as it cannot convert jsonobject into java object
org.json.JSONException: Unterminated object at character 13 of {"data":"10""}
How can i convert "{\"data\":\"10\"\"}" to { "data" : "10\"" }
Edit 2 :
I was converting the string to JSONObject the wrong way.
By removing slashes, I was also removing the slashes of escaped characters.
Solution : Instead, I used StringEscapeUtils.unescapeJson(jsonString) which didn't remove the slashes of escaped characters inside json key-value data.
You have to use \ escape character before ". Here's what you should do:
{ "length" : "10\"" }
If you have to use special character in your JSON string, you can escape it using \ character.
See this list of special character used in JSON :
\b Backspace (ascii code 08)
\f Form feed (ascii code 0C)
\n New line
\r Carriage return
\t Tab
\" Double quote
\\ Backslash character
Please share your error as well.
As far as from your Question i can see there are 2 quotes near 10.
{ "length" : "10"`"` }
If you want to insert " for inches please provide \".
Try this
jsonString = "{\"data\":\"10\"\"}";
String jsonFormattedString = jsonString.replaceAll("\\\\", "");
Log.i("Response",":"+jsonFormattedString);
OUTPUT
I/Response: :{"data":"10""}
EDIT
jsonString = "{\"data\":\"10\"\"}";
String jsonFormattedString = downloadDetails.replaceAll("\"", "");
Log.i("Response",":"+jsonFormattedString);
JSONObject jsonObject = new JSONObject(jsonFormattedString);
String data = jsonObject.getString("data");
Log.i("Response data",":"+data);
OUTPUT
I/Response: :{data:10}
I/Response data: :10
LAST EDIT
jsonString = "{\"data\":\"10\"\"}";
String jsonFormattedString = downloadDetails.replaceAll("\"", "");
Log.i("Response",":"+jsonFormattedString);
final String regex = "([a-zA-Z0-9-]+):([a-zA-Z0-9-]+)";
final String subst = "\"$1\":\"$2\"";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(jsonFormattedString);
jsonFormattedString = matcher.replaceAll(subst);
Log.i("Final Response",":"+jsonFormattedString);
JSONObject jsonObject = new JSONObject(jsonFormattedString);
String data = jsonObject.getString("data");
Log.i("Response data",":"+data);
data = data+"\"";
Log.i("FINAL VALUE",":"+data);
LAST OUTPUT
I/Response: :{data:10}
I/Final Response: :{"data":"10"}
I/Response data: :10
I/FINAL VALUE: :10"

How to encode username and password?

I need to send encoded username and Password through request body.
Here I'm sending username and password in the format of JSON object.
How to do it?
Thanks in advance.
Try
Encode
String encodedUsername = URLEncoder.encode(username);
String encodedPassword = URLEncoder.encode(password);
Decode
String decodedUsername = URLDecoder.decode(encodedUsername);
String decodedPassword = URLDecoder.decode(encodedPassword);
A simple Google search would've done the trick...
URLEncoder should be the way to go. You only need to keep in mind to
encode only the individual query string parameter name and/or value,
not the entire URL, for sure not the query string parameter separator
character & nor the parameter name-value separator character =.
String q = "random word £500 bank $";
String url = "http://example.com/query?q=" + URLEncoder.encode(q, "UTF-8");
...
Source:
Java URL encoding of query string parameters

How to Split response from Json in android?

I am developing an app in which I got response like "100.0" from server which I have to split to "100" and save in variable.How can I do that kindly tell me .
You can use this code to parse your JSON response. Store your wallet balance in a String, them trim the value as per your request
JSONObject object = new JSONObject(JsonResponseText);
String walletBal = object.getString("wallet balance");
String trimWalletBal = walletBal.subString(0,walletBal.indexOf('.'));
You can do it this way:
Integer value = jsonObject.getDouble("parameter").intValue();
Assuming that your problem is just to split the "Integer" and "Fraction" part of a "string" value you are getting from the server -
int decimalIdx = stringVal.indexOf('.');
if (decIdx != -1) {
return stringVal.substring(0, decIdx);
}
return stringVal;

How do I parse a HTTP Response of following format

I am using the bulk sms api to trigger send an sms to mobile number in and android phone. The format of the bulk sms api is follows
http://xxx.xxx.xxx/bulksms/bulksms?username=fds-xxx&password=xxx&type=0&dlr=1&destination=9422522891,8275004333&source=xxx&message=18%20December
The following is the response I can get in android as string using code
bytesSent = httpclient.execute(httppost, res);
response below
1701|919422522891:224c1214-bb95-414d-ba76-77db95370545,1701|918275004333:5e93a439-2644-4455-9f01-f27e6cf0cde6
How do I parse this response like key value pairs ?
A little success with following code , but it fails when the regex char is '|'
public String[] split(String regex,String input)
{
input = "1701|919422522891:224c1214-bb95-414d-ba76-77db95370545,1701|918275004333:5e93a439-2644-4455-9f01-f27e6cf0cde6";
regex = "|"; // does not work
//regex = ":"; // works correct
String[] soso = Pattern.compile(regex).split(input, input.length());
for (String s : soso) {
Log.e("TAG",s.toString());
}
return null;
}
for regex char '|'
I get a Log output as single characters string array like {"1","7","0",........}
UPDATE
regex = "\\|" // works fine
Use the split() method of String to split the response into different entries.
Loop through the resulting array
use split() again to separate keys from values
store the result in a map, result[0] is the key,result[1] is the value
if you need to maintain order make sure you use a map that does that, e.g. LinkedHashMap

Not able to get name/value pairs from JSON object, when using variable

Not able to get name/value pairs from JSON object, when using the variable but able to read it when hard coding the name.
To better explain :
1) My JSON object is like this -
{.....
{ "rates":{ "name1": value1, "name2": value2 ...etc }
...}
2) I am able to read this object in my android app.
3) Now this rate object name value pairs, i am trying to read based on user input -
String s1 = '"'+name1+'"'; // here name1 i got from user input, & converted into string
4) Now when i am trying to get the value from rates object, i am getting null exception -
JSONObject rateObject = jObject.getJSONObject("rates"); //able to get
complete object
String rate1 = (String) rateObject.get(s1); // giving NULL exception
5) But if i use hard code string, it works -
String rate1 = (String) rateObject.get("name1"); // working
Any pointers why its not working while using variable.
thanks
Thanks for suggestions, i sorted out the problem. There are 2 mistakes i was doing - 1) Using the quotes as correctly pointed out by others and 2) casting the double value to string. Correcting both has resolved my problem :)
In terms of your final code snippet, you are actually doing
String rate1 = (String) rateObject.get("\"name1\""); //note the extra quotes
because you have bookended the user input string with double-quote characters. You just want the input string itself with no bookending. The quotes in the JSON notation serve to delineate each key name; the quotes are not part of the key name itself.
You need to omit the quotes when you create s1:
String s1 = name1;
Or, if name1 is not a String already:
String s1 = name1.toString();
Replace:
String s1 = '"'+name1+'"';
with:
String s1 = name1;

Categories

Resources