Skip to content

Instantly share code, notes, and snippets.

@izmailoff
Last active March 31, 2023 07:53
Show Gist options
  • Save izmailoff/966aa0e2b7379324b502 to your computer and use it in GitHub Desktop.
Save izmailoff/966aa0e2b7379324b502 to your computer and use it in GitHub Desktop.
Convert `Content-Type: multipart/form-data` to JSON format because I can't read the former
object FormFieldsToJson extends App {
if(args.length != 1) {
println("Usage: FormDataParser <form data>")
System.exit(1)
}
val fieldDelimiter = "----"
val fieldNLines = 3
val data = args(0)
val nameRegex = """^.+name="(.+)"$""".r
val rawFields = data
.split('\n')
.dropWhile(! _.startsWith(fieldDelimiter))
.filter(! _.startsWith(fieldDelimiter))
.grouped(fieldNLines)
val fields = for {
Array(one, two, three) <- rawFields
fieldName = one match { case nameRegex(n) => n; case _ => "na" }
fieldValue = two.trim + three
} yield fieldName -> fieldValue
val jsonFields = fields map { case (k,v) => s""" "$k" : "$v"""" }
val jsonDoc = s"{\n${jsonFields.mkString(",\n")}\n}"
println(jsonDoc)
}
@izmailoff
Copy link
Author

How to use.

Compile:

scalac FormFieldsToJson.scala

Get some data:

formdata='Content-Type: multipart/form-data; boundary=---------------------------189793011315685
Content-Length: 2147

-----------------------------189793011315685
Content-Disposition: form-data; name="SomeFormField"

ThatFieldValue
-----------------------------189793011315685
Content-Disposition: form-data; name="AnotherField"

AnotherValue

....

Run it:

scala FormFieldsToJson "$formdata"

Prints:

{
  "SomeFormField" : "ThatFieldValue",
  "AnotherField" : "AnotherValue"
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment